Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 32

Не работает функция в Виндовс Формс

25.10.2012, 01:53. Показов 3022. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть набор функций:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
#include <string>
#include "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std;
typedef unsigned int uint;
uint F(uint X, uint Y, uint Z)
{
return (X & Y) | ((~X) & Z);
}
uint G(uint X, uint Y, uint Z)
{
return (X & Z) | (Y & (~Z));
}
uint H(uint X, uint Y, uint Z)
{
return X ^ Y ^ Z;
}
uint I(uint X, uint Y, uint Z)
{
return Y ^ (X | (~Z));
}
uint RotateLeft(uint value, int shift)
{
return value << shift | value >> (32-shift);
}
 
void MD5_hash(string sIn, int &A,int &B,int &C, int &D)
{
 
int length=sIn.size(); //получаем длину входного сообщения.
int rests=length%64; //остаток от деления на 64байта.
int size = 0; //тут будет храниться размер сообщения после первых 2ух шагов.
 
//Шаг 1.
if(rests < 56) //если остаток от деления на 64 меньше 56
 size=length-rests+56+8; //подгоняем размер так, что бы он был кратен 64(+8 байт для 2ого шага).
else //иначе (если остаток больше 56)
 size=length+64-rests+56+8; //подгоняем размер так, что бы он был кратен 64(+8 байт для 2ого шага).
 
char *cIn=new char[size]; //создаем динамический массив для хранения сообщения, которое далее будет кодироваться
 
for(int i=0;i<length;i++) //первые length элементов сIn
 cIn[i]=sIn[i]; //заполняем символами входного сообщения
 
cIn[length]=0x80; //савим в конец сообщения единичный бит.
 
for(int i=length+1;i<size;i++) //а все остальное
 cIn[i]=0; //заполняем нулями
 
//Шаг 2.
__int64 bitLength=(uint)(length)*8; //длина сообщения в битах.
 
for(int i=0;i<8;i++) //последние 8 байт
 cIn[size-8+i]=(bitLength >> i*8); //заполняем 64-битным представлением длины данных до выравнивания
 
//Шаг 3.
A=0x67452301, //Инициализируем начальные значения регистров.
B=0xefcdab89,
C=0x98badcfe,
D=0x10325476;
uint T[64]; //64-элементная таблица данных (констатнт).
 
for(int i=0;i<63;i++) //всю таблицу констант
 T[i]= pow(2.0,32.0)*fabs(sin(i*1.0)); //заполняем в соответствии с алгоритмом.
 
uint *X=new uint[size/4]; //создаем массив Х, в котором будет 32-разрядное представление сообщения.
 
X=(uint*)(cIn); //загоняем в массив Х сообщение cIn(в данном случае оно само разбиваеться на 32-разрядные слова).
 
//или это можно сделать "вручную" следующим образом:
//for(int i = 0; i <size/4; i++ )
 //X[ i] =(uint)(cIn[ i*4 + 3]<<24) +(uint)(cIn [i*4 + 2]<<16) + (uint)(cIn[i*4 + 1]<<8) + (uint)(cIn [i*4 + 0]);
 
//Шаг 4.
uint AA, BB, CC, DD;
 
for(int i=0;i<size/4;i+=16)
 {
 AA = A;BB = B; CC = C; DD = D;
 
 //раунд 1
 A = B + RotateLeft((A + F(B,C,D) + X[i+ 0] + T[ 1]),  7);
 D = A + RotateLeft((D + F(A,B,C) + X[i+ 1] + T[ 2]), 12);
 C = D + RotateLeft((C + F(D,A,B) + X[i+ 2] + T[ 3]), 17);
 B = C + RotateLeft((B + F(C,D,A) + X[i+ 3] + T[ 4]), 22);
 
 A = B + RotateLeft((A + F(B,C,D) + X[i+ 4] + T[ 5]),  7);
 D = A + RotateLeft((D + F(A,B,C) + X[i+ 5] + T[ 6]), 12);
 C = D + RotateLeft((C + F(D,A,B) + X[i+ 6] + T[ 7]), 17);
 B = C + RotateLeft((B + F(C,D,A) + X[i+ 7] + T[ 8]), 22);
 
 A = B + RotateLeft((A + F(B,C,D) + X[i+ 8] + T[ 9]),  7);
 D = A + RotateLeft((D + F(A,B,C) + X[i+ 9] + T[10]), 12);
 C = D + RotateLeft((C + F(D,A,B) + X[i+10] + T[11]), 17);
 B = C + RotateLeft((B + F(C,D,A) + X[i+11] + T[12]), 22);
 
 A = B + RotateLeft((A + F(B,C,D) + X[i+12] + T[13]),  7);
 D = A + RotateLeft((D + F(A,B,C) + X[i+13] + T[14]), 12);
 C = D + RotateLeft((C + F(D,A,B) + X[i+14] + T[15]), 17);
 B = C + RotateLeft((B + F(C,D,A) + X[i+15] + T[16]), 22);
 
 //раунд 2
 A = B + RotateLeft((A + G(B,C,D) + X[i+ 1] + T[17]),  5);
 D = A + RotateLeft((D + G(A,B,C) + X[i+ 6] + T[18]),  9);
 C = D + RotateLeft((C + G(D,A,B) + X[i+11] + T[19]), 14);
 B = C + RotateLeft((B + G(C,D,A) + X[i+ 0] + T[20]), 20);
 
 A = B + RotateLeft((A + G(B,C,D) + X[i+ 5] + T[21]),  5);
 D = A + RotateLeft((D + G(A,B,C) + X[i+10] + T[22]),  9);
 C = D + RotateLeft((C + G(D,A,B) + X[i+15] + T[23]), 14);
 B = C + RotateLeft((B + G(C,D,A) + X[i+ 4] + T[24]), 20);
 
 A = B + RotateLeft((A + G(B,C,D) + X[i+ 9] + T[25]),  5);
 D = A + RotateLeft((D + G(A,B,C) + X[i+14] + T[26]),  9);
 C = D + RotateLeft((C + G(D,A,B) + X[i+ 3] + T[27]), 14);
 B = C + RotateLeft((B + G(C,D,A) + X[i+ 8] + T[28]), 20);
 
 A = B + RotateLeft((A + G(B,C,D) + X[i+13] + T[29]),  5);
 D = A + RotateLeft((D + G(A,B,C) + X[i+ 2] + T[30]),  9);
 C = D + RotateLeft((C + G(D,A,B) + X[i+ 7] + T[31]), 14);
 B = C + RotateLeft((B + G(C,D,A) + X[i+12] + T[32]), 20);
 
 //раунд 3
 A = B + RotateLeft((A + H(B,C,D) + X[i+ 5] + T[33]),  4);
 D = A + RotateLeft((D + H(A,B,C) + X[i+ 8] + T[34]), 11);
 C = D + RotateLeft((C + H(D,A,B) + X[i+11] + T[35]), 16);
 B = C + RotateLeft((B + H(C,D,A) + X[i+14] + T[36]), 23);
 
 A = B + RotateLeft((A + H(B,C,D) + X[i+ 1] + T[37]),  4);
 D = A + RotateLeft((D + H(A,B,C) + X[i+ 4] + T[38]), 11);
 C = D + RotateLeft((C + H(D,A,B) + X[i+ 7] + T[39]), 16);
 B = C + RotateLeft((B + H(C,D,A) + X[i+10] + T[40]), 23);
 
 A = B + RotateLeft((A + H(B,C,D) + X[i+13] + T[41]),  4);
 D = A + RotateLeft((D + H(A,B,C) + X[i+ 0] + T[42]), 11);
 C = D + RotateLeft((C + H(D,A,B) + X[i+ 3] + T[43]), 16);
 B = C + RotateLeft((B + H(C,D,A) + X[i+ 6] + T[44]), 23);
 
 A = B + RotateLeft((A + H(B,C,D) + X[i+ 9] + T[45]),  4);
 D = A + RotateLeft((D + H(A,B,C) + X[i+12] + T[46]), 11);
 C = D + RotateLeft((C + H(D,A,B) + X[i+15] + T[47]), 16);
 B = C + RotateLeft((B + H(C,D,A) + X[i+ 2] + T[48]), 23);
 
 //раунд 4
 A = B + RotateLeft((A + I(B,C,D) + X[i+ 0] + T[49]),  6);
 D = A + RotateLeft((D + I(A,B,C) + X[i+ 7] + T[50]), 10);
 C = D + RotateLeft((C + I(D,A,B) + X[i+14] + T[51]), 15);
 B = C + RotateLeft((B + I(C,D,A) + X[i+ 5] + T[52]), 21);
 
 A = B + RotateLeft((A + I(B,C,D) + X[i+12] + T[53]),  6);
 D = A + RotateLeft((D + I(A,B,C) + X[i+ 3] + T[54]), 10);
 C = D + RotateLeft((C + I(D,A,B) + X[i+10] + T[55]), 15);
 B = C + RotateLeft((B + I(C,D,A) + X[i+ 1] + T[56]), 21);
 
 A = B + RotateLeft((A + I(B,C,D) + X[i+ 8] + T[57]),  6);
 D = A + RotateLeft((D + I(A,B,C) + X[i+15] + T[58]), 10);
 C = D + RotateLeft((C + I(D,A,B) + X[i+ 6] + T[59]), 15);
 B = C + RotateLeft((B + I(C,D,A) + X[i+13] + T[60]), 21);
 
 A = B + RotateLeft((A + I(B,C,D) + X[i+ 4] + T[61]),  6);
 D = A + RotateLeft((D + I(A,B,C) + X[i+11] + T[62]), 10);
 C = D + RotateLeft((C + I(D,A,B) + X[i+ 2] + T[63]), 15);
 B = C + RotateLeft((B + I(C,D,A) + X[i+ 9] + T[64]), 21);
 
 A = AA + A;
 B = BB + B;
 C = CC + C;
 D = DD + D;
}
unsigned char key[4];
key[0] = A;
key[1] = B;
key[2] = C;
key[3] = D;
 
}
И этот набор нормально работает в консольном приложении, но выдает разный выход на одинаковые входные данные в виндовс форм. В чем может быть дело? Проблема начинается с числа B, число А всегда идет одинаковое. Только с B начинается идти ад и угар непонятно откуда взявшихся чисел.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.10.2012, 01:53
Ответы с готовыми решениями:

Перемещение объектов в Виндовс Формс
Как перемещать объект кнопками в виндовс форм . Просто пытаюсь привязать на клавиатура у меня ошибки выбивают,хочу попробывать на кнопки но...

Использование собственного класса в Виндовс Формс
Надо сделать программу на Windows Forms. По сути ето типа база данных транспортных средств должа быть, правда без использования баз данных...

Нужно переделать консольное приложение под виндовс формс
код using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; ...

28
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
28.11.2012, 14:01
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Crait Посмотреть сообщение
что в свою очередь приводит к случайному, если можно так сказать, заполнению массива X[].
Это происходит при одном и том же содержимом строки?
0
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 32
30.11.2012, 23:29  [ТС]
Цитата Сообщение от HighPredator Посмотреть сообщение
Это происходит при одном и том же содержимом строки?
Да. Посмотрите на скриншоты. Содержимое строки одно и то же, специально чтобы убедиться в этом, я начал задавать ее как
C++
1
string sIn = "text";
Но цифры, слева от строки какждый раз разные. Я думаю, проблема в них, на большее моих знаний не хватает.

Добавлено через 20 часов 50 минут
Вверх!

Добавлено через 21 час 52 минуты
вверх!

Добавлено через 8 часов 23 минуты
Вверх!
0
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 32
13.12.2012, 02:05  [ТС]
Забавный факт: если в отладчике консольного приложения включить конфигурацию Release, то оно будет глючить точно так же.
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
13.12.2012, 02:18
Crait, за месяц с лишним можно было хоть задание озвучить .
0
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 32
13.12.2012, 13:18  [ТС]
Цитата Сообщение от MrCold Посмотреть сообщение
Crait, за месяц с лишним можно было хоть задание озвучить .
Что значит "Озвучить задание"? Как и где его озвучивать?
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
13.12.2012, 13:23
Напишите задание полностью, так будет легче помочь
0
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 32
13.12.2012, 17:52  [ТС]
Задание - написать алгоритм, выдающий MD5 хэш. Собственно, он уже написан, и в консоли отлично работает под дебаг модом. Но в релизе и в виндовс форм ( в формах в любой конфигурации ) не работает ничего: получаем на выходе случайный хэш.
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
14.12.2012, 18:32
Цитата Сообщение от Crait Посмотреть сообщение
Задание - написать алгоритм, выдающий MD5 хэш.
Далее код
Цитата Сообщение от Crait Посмотреть сообщение
AES_Windowed
AES тут зачем ?
0
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 32
17.12.2012, 21:26  [ТС]
Все исправил. Проблема мелкая совсем оказалась: обращение к 64 элементу массива T.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.12.2012, 21:26

Стояла вин 7, второй установила виндовс 8.1. Теперь в виндовс 7 не работает мышь
у меня виндовс 7,но я теперь захотела еще и вторую установить.установила 8.1.казалось бы все хорошо,на виндовс 8.1 работает все,а вот...

Запуск средства восстановления Windows 7. Не работает мышь. Не работает виндовс
Виндовс не запускается, нельзя воспользоваться средством восстановления и попасть в безопасный режим При включении компьютера...

Модем не работает на виндовс но на убунту всё работает
Всем форумчанинам доброго времени суток!Я и раньше обращялся по поводу модема.Дела втом что модем не работает на виндовс но на убунту всё...

Функция компилируется, но вызывает виндовс ошибку
int main() int r=replace(str, c1, c2); return 0; int replace(char *str, char c1, char c2) { int count=0; ...

Как называется функция на виндовс калькуляторе In(x)?
пишу код калькулятора на С++ Builder 6.0 #include &lt;math.h&gt; void __fastcall TForm1::Button24Click(TObject *Sender) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru