Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/212: Рейтинг темы: голосов - 212, средняя оценка - 4.77
31 / 31 / 3
Регистрация: 18.03.2009
Сообщений: 381
Записей в блоге: 2
1

Получить MD5 хэш введенного текста

25.07.2010, 16:25. Показов 42124. Ответов 47
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите какую библиотеку нужно подключить и где её взять чтобы получить мд5 хэш текста? облазил интернет ничего рабочего не нашел
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.07.2010, 16:25
Ответы с готовыми решениями:

Как получить MD5-хэш введенного пароля?
Всем доброго времени суток. Сейчас пишу простенький лаунчер для своего сервера и он должен брать...

Перевод текста в md5 хэш
подскажите как перевести переменную в md5 хэш? Пробовал так: <?php $Str = 'apple'; echo...

Получить MD5-хэш для строк
вот как получить мд5 через пробел от такого отрывка кода: Console.WriteLine(s7 + i.ToString() + s2...

Получить MD5-хэш для значения из базы данных
вот как мне написать код который как бы в базе данных будет то есть вот для буквы а мд5 является...

47
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
01.08.2012, 18:25 21
Author24 — интернет-сервис помощи студентам
Ну, если в настройках студии ничего не трогали (типа пути к библиотекам или наподобие), тогда... я пас.
0
Я Фоюмчанин ? дааааа)
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
01.08.2012, 20:56 22
Rapsod,
Комп выключили, Билдера закрыли

эмм... Билдер закрыли после выключения компа?
0
Волшебник
65 / 64 / 7
Регистрация: 21.11.2009
Сообщений: 319
02.08.2012, 00:55 23
Цитата Сообщение от ivan.-94 Посмотреть сообщение
Rapsod,

эмм... Билдер закрыли после выключения компа?
ivan.-94, а Вы очень внимательны! Но так и не заметили ошибки, что в конце строки ещё нету точки с комой ";"
0
Волшебник
65 / 64 / 7
Регистрация: 21.11.2009
Сообщений: 319
09.08.2012, 10:38 24
Всем привет!

Все это время занимался исследованием MD5 хеша.
Мои выводы:

Используя встроеную библиотеку Indy, а точнее IdHashMessageDigest.hpp,
мы не получаем реальный MD5 хеш. Возможно потому что используется какой-то ещё кодер, или просто добавляеться какой-то код (как говориться в других словах "соль").
Проверить это вы можете сами, собравь проект с использованием "IdHashMessageDigest.hpp" и сверить полученый хеш MD5, с хешем MD5 на любом сайте кодинга (http://md5encryption.com).

Решение:

Самый хороший способ это добавить к проекту сам алгоритм хеширования.

Приступаем.
1. Создаем пустой проект
2. Бросаем на форму Edit1, Edit2 и Button1.
3. Добавляем к проекту два файла : MD5.H и MD5.CPP
4. В Unit1.cpp добавляем: #include "MD5.h"
5. Добавляем код на кнопку: Edit2->Text = MD5(Edit1->Text);

Всё проект готов, MD5 hash которого соответствует стандарту.

Прикрепляю код хеширования + исходники

MD5.CPP
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
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
#include "md5.h"
 
BYTE  m_lpszBuffer[64];
ULONG m_nCount[2];
ULONG m_lMD5[4];
 
static unsigned char PADDING[64] = {
 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
 
#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
#define H(x, y, z) ((x) ^ (y) ^ (z))
#define I(x, y, z) ((y) ^ ((x) | (~z)))
 
#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
 
#define FF(a, b, c, d, x, s, ac) \
 {(a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
  (a) = ROTATE_LEFT ((a), (s)); \
  (a) += (b); \
 }
#define GG(a, b, c, d, x, s, ac) \
 {(a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
  (a) = ROTATE_LEFT ((a), (s)); \
  (a) += (b); \
 }
#define HH(a, b, c, d, x, s, ac) \
 {(a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
  (a) = ROTATE_LEFT ((a), (s)); \
  (a) += (b); \
 }
#define II(a, b, c, d, x, s, ac) \
 {(a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
  (a) = ROTATE_LEFT ((a), (s)); \
  (a) += (b); \
 }
 
void ByteToDWord(DWORD* Output, ULONG* Input, UINT nLength){
UINT i=0;
UINT j=0;
for (; j < nLength; i++, j += 4)
{
 Output[i] = (ULONG)Input[j]   | 
    (ULONG)Input[j+1] << 8 | 
    (ULONG)Input[j+2] << 16 | 
    (ULONG)Input[j+3] << 24;
}
}
 
void DWordToByte(unsigned char* Output, DWORD* Input, UINT nLength ){
UINT i = 0;
UINT j = 0;
for (; j < nLength; i++, j += 4) 
{
 Output[j] =   (UCHAR)(Input[i] & 0xff);
 Output[j+1] = (UCHAR)((Input[i] >> 8) & 0xff);
 Output[j+2] = (UCHAR)((Input[i] >> 16) & 0xff);
 Output[j+3] = (UCHAR)((Input[i] >> 24) & 0xff);
}
}
 
void MD5Init (void)
{
 memset(m_lpszBuffer, 0, 64 );
 m_nCount[0] = m_nCount[1] = 0;
 
m_lMD5[0] = MD5_INIT_STATE_0;
m_lMD5[1] = MD5_INIT_STATE_1;
m_lMD5[2] = MD5_INIT_STATE_2;
m_lMD5[3] = MD5_INIT_STATE_3;
}
 
void MD5Update (unsigned char *inBuf, unsigned int inLen)
{
 register int i, ii;
 int mdi;
 UINT4 in[16];
 
 mdi = (int)((m_nCount[0] >> 3) & 0x3F);
 
 if ((m_nCount[0] + ((UINT4)inLen << 3)) < m_nCount[0])
   m_nCount[1]++;
 m_nCount[0] += ((UINT4)inLen << 3);
 m_nCount[1] += ((UINT4)inLen >> 29);
 
 while (inLen--) {
   m_lpszBuffer[mdi++] = *inBuf++;
 
   if (mdi == 0x40) {
     for (i = 0, ii = 0; i < 16; i++, ii += 4)
       in[i] = (((UINT4)m_lpszBuffer[ii+3]) << 24) |
               (((UINT4)m_lpszBuffer[ii+2]) << 16) |
               (((UINT4)m_lpszBuffer[ii+1]) << 8) |
               ((UINT4)m_lpszBuffer[ii]);
     Transform (m_lMD5, in);
     mdi = 0;
   }
 }
}
 
void MD5Final (char* cReturnStr)
{
unsigned char bits[8];
int nIndex;
unsigned int nPadLen;
const int nMD5Size = 16;
 unsigned char lpszMD5[16];
char temp[2];
int i;
 
cReturnStr[0]='\0';
 
DWordToByte( bits, m_nCount, 8 );
 
nIndex = (int)((m_nCount[0] >> 3) & 0x3f);
nPadLen = (nIndex < 56) ? (56 - nIndex) : (120 - nIndex);
MD5Update (PADDING, nPadLen);
 
MD5Update (bits, 8);
 
DWordToByte( lpszMD5, m_lMD5, nMD5Size );
 
for (i=0; i < nMD5Size; i++) 
{
 
 if (lpszMD5[i] == 0) {
  temp[0] = '0';
  temp[1]='0';
 }
 else if (lpszMD5[i] <= 15)  {
     sprintf(temp,"0%x",lpszMD5[i]);
 }
 else {
     sprintf(temp,"%x",lpszMD5[i]);
 }
   strcat(cReturnStr,temp);
}
lpszMD5[0]='\0';
}
 
void Transform(register UINT4 *buf,register UINT4 *in)
{
 register UINT4 a = buf[0], b = buf[1], c = buf[2], d = buf[3];
 
#define S11 7
#define S12 12
#define S13 17
#define S14 22
 FF ( a, b, c, d, in[ 0], S11, 0xD76AA478L); 
 FF ( d, a, b, c, in[ 1], S12, 0xE8C7B756L); 
 FF ( c, d, a, b, in[ 2], S13, 0x242070DBL); 
 FF ( b, c, d, a, in[ 3], S14, 0xC1BDCEEEL); 
 FF ( a, b, c, d, in[ 4], S11, 0xF57C0FAFL); 
 FF ( d, a, b, c, in[ 5], S12, 0x4787C62AL); 
 FF ( c, d, a, b, in[ 6], S13, 0xA8304613L); 
 FF ( b, c, d, a, in[ 7], S14, 0xFD469501L); 
 FF ( a, b, c, d, in[ 8], S11, 0x698098D8L); 
 FF ( d, a, b, c, in[ 9], S12, 0x8B44F7AFL); 
 FF ( c, d, a, b, in[10], S13, 0xFFFF5BB1L); 
 FF ( b, c, d, a, in[11], S14, 0x895CD7BEL); 
 FF ( a, b, c, d, in[12], S11, 0x6B901122L); 
 FF ( d, a, b, c, in[13], S12, 0xFD987193L); 
 FF ( c, d, a, b, in[14], S13, 0xA679438EL); 
 FF ( b, c, d, a, in[15], S14, 0x49B40821L); 
 
#define S21 5
#define S22 9
#define S23 14
#define S24 20
 GG ( a, b, c, d, in[ 1], S21, 0xF61E2562L); 
 GG ( d, a, b, c, in[ 6], S22, 0xC040B340L); 
 GG ( c, d, a, b, in[11], S23, 0x265E5A51L); 
 GG ( b, c, d, a, in[ 0], S24, 0xE9B6C7AAL); 
 GG ( a, b, c, d, in[ 5], S21, 0xD62F105DL); 
 GG ( d, a, b, c, in[10], S22, 0x02441453L); 
 GG ( c, d, a, b, in[15], S23, 0xD8A1E681L); 
 GG ( b, c, d, a, in[ 4], S24, 0xE7D3FBC8L); 
 GG ( a, b, c, d, in[ 9], S21, 0x21E1CDE6L); 
 GG ( d, a, b, c, in[14], S22, 0xC33707D6L); 
 GG ( c, d, a, b, in[ 3], S23, 0xF4D50D87L); 
 GG ( b, c, d, a, in[ 8], S24, 0x455A14EDL); 
 GG ( a, b, c, d, in[13], S21, 0xA9E3E905L); 
 GG ( d, a, b, c, in[ 2], S22, 0xFCEFA3F8L); 
 GG ( c, d, a, b, in[ 7], S23, 0x676F02D9L); 
 GG ( b, c, d, a, in[12], S24, 0x8D2A4C8AL); 
 
#define S31 4
#define S32 11
#define S33 16
#define S34 23
 HH ( a, b, c, d, in[ 5], S31, 0xFFFA3942L); 
 HH ( d, a, b, c, in[ 8], S32, 0x8771F681L); 
 HH ( c, d, a, b, in[11], S33, 0x6D9D6122L); 
 HH ( b, c, d, a, in[14], S34, 0xFDE5380CL); 
 HH ( a, b, c, d, in[ 1], S31, 0xA4BEEA44L);
 HH ( d, a, b, c, in[ 4], S32, 0x4BDECFA9L); 
 HH ( c, d, a, b, in[ 7], S33, 0xF6BB4B60L); 
 HH ( b, c, d, a, in[10], S34, 0xBEBFBC70L); 
 HH ( a, b, c, d, in[13], S31, 0x289B7EC6L); 
 HH ( d, a, b, c, in[ 0], S32, 0xEAA127FAL); 
 HH ( c, d, a, b, in[ 3], S33, 0xD4EF3085L); 
 HH ( b, c, d, a, in[ 6], S34, 0x04881D05L);
 HH ( a, b, c, d, in[ 9], S31, 0xD9D4D039L); 
 HH ( d, a, b, c, in[12], S32, 0xE6DB99E5L); 
 HH ( c, d, a, b, in[15], S33, 0x1FA27CF8L); 
 HH ( b, c, d, a, in[ 2], S34, 0xC4AC5665L); 
 
#define S41 6
#define S42 10
#define S43 15
#define S44 21
 II ( a, b, c, d, in[ 0], S41, 0xF4292244L); 
 II ( d, a, b, c, in[ 7], S42, 0x432AFF97L); 
 II ( c, d, a, b, in[14], S43, 0xAB9423A7L); 
 II ( b, c, d, a, in[ 5], S44, 0xFC93A039L); 
 II ( a, b, c, d, in[12], S41, 0x655B59C3L); 
 II ( d, a, b, c, in[ 3], S42, 0x8F0CCC92L); 
 II ( c, d, a, b, in[10], S43, 0xFFEFF47DL); 
 II ( b, c, d, a, in[ 1], S44, 0x85845DD1L); 
 II ( a, b, c, d, in[ 8], S41, 0x6FA87E4FL); 
 II ( d, a, b, c, in[15], S42, 0xFE2CE6E0L); 
 II ( c, d, a, b, in[ 6], S43, 0xA3014314L); 
 II ( b, c, d, a, in[13], S44, 0x4E0811A1L); 
 II ( a, b, c, d, in[ 4], S41, 0xF7537E82L); 
 II ( d, a, b, c, in[11], S42, 0xBD3AF235L); 
 II ( c, d, a, b, in[ 2], S43, 0x2AD7D2BBL); 
 II ( b, c, d, a, in[ 9], S44, 0xEB86D391L); 
 
 buf[0] += a;
 buf[1] += b;
 buf[2] += c;
 buf[3] += d;
}
 
void GetMD5(char* pBuf, UINT nLength,char* cReturnStr) {
    MD5Init();
    MD5Update(pBuf, nLength);
    MD5Final(cReturnStr);
    }
 
AnsiString MD5(AnsiString in) {
    char out_char[32];
    GetMD5(in.c_str(),in.Length(),out_char);
    return AnsiString(out_char);
    }

MD5.H
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <system.hpp>
#include <windef.h>
#include <stdio.h>
 
#ifdef __alpha
typedef unsigned int UINT4;
#else
typedef unsigned long int UINT4;
#endif
 
#define MD5_INIT_STATE_0 0x67452301
#define MD5_INIT_STATE_1 0xefcdab89
#define MD5_INIT_STATE_2 0x98badcfe
#define MD5_INIT_STATE_3 0x10325476
 
void MD5Init(void);
void MD5Update(unsigned char *bug, unsigned int len);
void MD5Final(char* cReturnStr);
void Transform(UINT4 *buf, UINT4 *in);
void GetMD5(char* pBuf, UINT nLength,char* cReturnStr);
AnsiString MD5(AnsiString in);

А теперь вопрос знатокам: Как с помощью этого способа хеширования, получить хеш файла???
Зарание благодарю за ответ!
Вложения
Тип файла: zip MD5-hash.zip (456.7 Кб, 86 просмотров)
2
1123 / 794 / 101
Регистрация: 01.02.2011
Сообщений: 1,880
Записей в блоге: 1
09.08.2012, 10:50 25
Я думаю, самый правильный вариант - научиться работать с TIdCoder.
И тогда будет по плечу:
TIdBase64Encoder
TIdBase64Decoder
TIdUUEncoder
TIdUUDecoder
TIdIMFDecoder
TIdCoderMD2
TIdCoderMD4
TIdCoderMD5
TIdQuotedPrintableEncoder
Универсальное руководство с примерами для всех этих компонентов бы кто-нибудь написал -> было бы здорово.
0
Волшебник
65 / 64 / 7
Регистрация: 21.11.2009
Сообщений: 319
09.08.2012, 14:24 26
Цитата Сообщение от kzru_hunter Посмотреть сообщение
Я думаю, самый правильный вариант - научиться работать с TIdCoder.
И тогда будет по плечу:

Универсальное руководство с примерами для всех этих компонентов бы кто-нибудь написал -> было бы здорово.
К сожалению, а может и нет, но в студии RAD C++Builder 2010 таких компонентов нету.
И к тому же, где-то на каком-то форуме читал что TIdCoderMD5 тоже не правильно подсчитывает хеш.

Ах да, вот:

C++
1
2
3
4
5
AnsiString stroka = "Строка";
IdCoderMD51->AutoCompleteInput=true;
stroka=IdCoderMD51->CodeString(stroka);
IdCoderMD51->AutoCompleteInput=false;
IdCoderMD51->Reset(); //reset нужен чтобы сбросить кодер
Выдает на входную строку "Memo1" вот что:"+5ߧaš£4Z oзÀÍ"
а должно выдавать: "7e4584a00e89b9aad0bc0e4c2bc11738".(взято из форума. сам не проверял).

Так что используй тот метод что я расписал, он по крайней мере стабильно работает.


Но все же вопрос остается актуален, как в выше описаном способе хеширования MD5, получить контрольную сумму файла???
0
1123 / 794 / 101
Регистрация: 01.02.2011
Сообщений: 1,880
Записей в блоге: 1
09.08.2012, 15:11 27
Цитата Сообщение от Rapsod Посмотреть сообщение
Выдает на входную строку "Memo1" вот что:"+5ߧaš£4Z oзÀÍ"
а должно выдавать: "7e4584a00e89b9aad0bc0e4c2bc11738".(взято из форума. сам не проверял).
он правильно выдает, просто надо перевести в 16-е представление

Цитата Сообщение от Rapsod Посмотреть сообщение
Так что используй тот метод что я расписал
0
Волшебник
65 / 64 / 7
Регистрация: 21.11.2009
Сообщений: 319
09.08.2012, 15:22 28
Цитата Сообщение от kzru_hunter Посмотреть сообщение
Так что используй тот метод что я расписал
Было бы проще но увы...
Цитата Сообщение от Rapsod Посмотреть сообщение
в студии RAD C++Builder 2010 таких компонентов нету
Так что жду помощи в моей ситуации
Я так понимаю нужно файл отобразить в виде набора символов и уместить его в функцию хеширования.
Помогите, кто знает как правильно это сделать!
Спасибо
0
1123 / 794 / 101
Регистрация: 01.02.2011
Сообщений: 1,880
Записей в блоге: 1
09.08.2012, 15:48 29
Цитата Сообщение от Rapsod Посмотреть сообщение
в студии RAD C++Builder 2010 таких компонентов нету
хм, странно, в 6-й есть (во вкладке Indy Misc), по идее и в новых билдерах тоже должны быть.
если память не изменяет, то в Builder XE есть (сейчас не могу проверить, под хрюшой сижу, а установлен на win7).

Цитата Сообщение от Rapsod Посмотреть сообщение
Я так понимаю нужно файл отобразить в виде набора символов и уместить его в функцию хеширования.
TIdCoder вроде бы с файлами умеет работать, по крайней мере есть свойство FileName, но мало написано про него и без примера.
0
Волшебник
65 / 64 / 7
Регистрация: 21.11.2009
Сообщений: 319
09.08.2012, 16:24 30
Цитата Сообщение от kzru_hunter Посмотреть сообщение
TIdCoder вроде бы с файлами умеет работать
Цитата Сообщение от Rapsod Посмотреть сообщение
в студии RAD C++Builder 2010 таких компонентов нету
Поэтому этот вариант меня не устраивает.
Есть другие варианты, которые не используют компоненты и библиотеку Инди?
0
1123 / 794 / 101
Регистрация: 01.02.2011
Сообщений: 1,880
Записей в блоге: 1
09.08.2012, 17:33 31
действительно, борода с этим Indy.
хотел попробовать TIdHashMessageDigest5 в BuilderXE, но то, что написано в справке билдера не соответствует действительности.

Вообщем, все же догадался, как вычислить md5 в BuilderXE:
C++
1
2
    TIdHashMessageDigest5 *md5 = new TIdHashMessageDigest5;
    ShowMessage( md5->HashStringAsHex("password") );
Попробуй, может и в 2010 сработает.
1
Волшебник
65 / 64 / 7
Регистрация: 21.11.2009
Сообщений: 319
10.08.2012, 12:27 32
Цитата Сообщение от kzru_hunter Посмотреть сообщение
действительно, борода с этим Indy.
хотел попробовать TIdHashMessageDigest5 в BuilderXE, но то, что написано в справке билдера не соответствует действительности.
Вообщем, все же догадался, как вычислить md5 в BuilderXE:Код C++
1
2 TIdHashMessageDigest5 *md5 = new TIdHashMessageDigest5;
ShowMessage( md5->HashStringAsHex("password") );
Попробуй, может и в 2010 сработает.
Это не MD5! Я на 3-й странице уже написал что этот способ не соответствует стандарту MD5. Ибо результаты получаются разные!
+ на странице №3 я выложил рабочий код с работающим проектом, который по стандарту получает MD5 хеш строки.
Но вопрос заключается в том, как с помощью этого же кода получить хеш файла, а не строки??? Что нужно изменить или добавить?
Заранее благодарю за помощь!
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
10.08.2012, 14:23 33
Можно:
  • Изменить код вычисления md5, чтобы он читал из файла.
  • Прочитать файл в память, если он небольшой.
  • Использовать CreateFileMapping + MapViewOfFile.
1
Волшебник
65 / 64 / 7
Регистрация: 21.11.2009
Сообщений: 319
10.08.2012, 14:43 34
Спасибо Somebody!

А Вы не подскажите, пожалуйста, как правильно:
Цитата Сообщение от Somebody Посмотреть сообщение
Изменить код вычисления md5, чтобы он читал из файла.
???
Заранее благодарю!
0
1123 / 794 / 101
Регистрация: 01.02.2011
Сообщений: 1,880
Записей в блоге: 1
10.08.2012, 18:01 35
Цитата Сообщение от Rapsod Посмотреть сообщение
Это не MD5! Я на 3-й странице уже написал что этот способ не соответствует стандарту MD5. Ибо результаты получаются разные!
MD5 и в вашем случае результат тоже был MD5, но похоже Вы не поняли, что это результатом функции было не какое-то левое число, а именно md5, просто по-другому записано (я кстати, писал об этом)

Добавлено через 15 минут
Вот код получения md5 из файла (в BuilderXE):
C++
1
2
3
4
5
6
7
    #include <IdHashMessageDigest.hpp>
    ...
    TIdHashMessageDigest5 *md5 = new TIdHashMessageDigest5;
    TFileStream *fs = new TFileStream("D:\\1.txt", fmOpenRead);
    String sMD5 = md5->HashStreamAsHex(fs);
    delete fs;
    ShowMessage(sMD5);
1
Волшебник
65 / 64 / 7
Регистрация: 21.11.2009
Сообщений: 319
16.08.2012, 08:27 36
Цитата Сообщение от kzru_hunter Посмотреть сообщение
MD5 и в вашем случае результат тоже был MD5, но похоже Вы не поняли, что это результатом функции было не какое-то левое число, а именно md5, просто по-другому записано (я кстати, писал об этом)
Здравствуйте kzru_hunter!
Я то понял что эта функция получает хеш, но он отличается от реального хеша MD5. У меня есть задание написать программу получения MD5 хеша строго по стандарту.

Вот потому я и выложил исходные коды стандартизированного MD5 хеша. Но он получает хеш со строчки, а мне нужно получить хеш файла)

Если Вы знаете как это сделать, буду очень благодарен!!!

P.S. а что Вы имели введу по поводу того что: "просто по-другому записано"?
Спасибо!
0
1123 / 794 / 101
Регистрация: 01.02.2011
Сообщений: 1,880
Записей в блоге: 1
17.08.2012, 11:32 37
Цитата Сообщение от Rapsod Посмотреть сообщение
Я то понял что эта функция получает хеш, но он отличается от реального хеша MD5.
действительно, даже если выводить в HEX-формате (думал, что если перевести в HEX формат, то будет нормальный md5).
получается, что TIdCoderMD5 на свалку.

Но зато в BuilderXE класс TIdHashMessageDigest5 у меня нормально работает. Код приводил в предыдущем посте.

Цитата Сообщение от Rapsod Посмотреть сообщение
P.S. а что Вы имели введу по поводу того что: "просто по-другому записано"?
md5 - это 128-битный алгоритм, т.е. 16 байт.
но мы его привыкли его видеть HEX-формате из 32 байт (т.е. из символов 0123456789ABCDEF).
я думал, что если 16 байт, которые вернул TIdCoder, перевести в HEX-формат, то получим нормальный md5.
0
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
18.08.2012, 14:41 38
Протестил каждую функцию приведенную в этой теме.
К сожалению работают они не корректно, к примеру одна функция выдает:
Код
2bb596667db6893e3269335b4a93d139
Вторая:
Код
D7920D1EAE8A44F442B33B33EF147B88
сайт: http://www.md5.cz/
Код
d570316ed921681afdbaa100b1171a3a
А на деле должно получиться:
Код
f81a1ca99a0a76f6d059c7bd8833d45b
0
518 / 306 / 58
Регистрация: 30.07.2008
Сообщений: 607
18.08.2012, 18:06 39
пробовал на тескст: "1234"

http://mainspy.ru/shifrovanie_md5
81dc9bdb52d04dc20036dbd8313ed055

http://md5-hash-online.waraxe.us/
81dc9bdb52d04dc20036dbd8313ed055

http://www.md5.cz/
81dc9bdb52d04dc20036dbd8313ed055

neoMitya предложил хороший вариант для текста
Получить MD5 хэш введенного текста
81dc9bdb52d04dc20036dbd8313ed055

(подправил чуток под себя)
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
//---------------------------------------------------------------------------
String MD5(String str)
{
    //#include <stdio.h>
    //USE:
    //Edit2->Text = MD5(Edit1->Text);
    char *data = str.c_str();
    int size = str.Length();
    HCRYPTHASH hHash;
    HCRYPTPROV hProv;
    BYTE md5hash[16];
    DWORD md5hash_size,dwSize,i;
    static char str_hash[33];
    ZeroMemory(str_hash, sizeof(str_hash));
    ZeroMemory(md5hash, sizeof(md5hash));
    CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0);
    CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash);
    CryptHashData(hHash, data, size, 0);
    dwSize=sizeof(md5hash_size);
    CryptGetHashParam(hHash, HP_HASHSIZE, (BYTE *)&md5hash_size, &dwSize, 0);
    CryptGetHashParam(hHash, HP_HASHVAL, md5hash, &md5hash_size, 0);
    CryptDestroyHash(hHash);
    CryptReleaseContext(hProv, 0);
    for(i = 0; i < md5hash_size; i++)
    {
        sprintf(str_hash+2*i,"%2.2x",md5hash[i]);
    }
    return String(str_hash);
}
//---------------------------------------------------------------------------
1
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
18.08.2012, 19:13 40
Gremlin, попробуйте теперь длинный текст в 120-200 символов. Каждая по разному начнет выдавать.
0
18.08.2012, 19:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.08.2012, 19:13
Помогаю со студенческими работами здесь

Ввести в форму слово и получить его md5 и sha1 хэш.
Подскажите пожалуйста как ее использовать? &lt;?php $str = 'слово'; if...

Разгадать хэш md5
Сразу скажу - не уверен, что написал в нужный раздел. Дан хэш...

Неполный хэш MD5
Добрый вечер. Сегодня пытался реализовать функцию хеширования по одному примеру. Но почему в итоге...

Хэш sha1 и md5
Посчитать хэш sha1 и md5 выбранный пользователем файл алгоритмом . Использовать стандартную...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru