Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.137.187.233] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
тут ошибка, у тебя размер данных всегда 0. |
Сообщ.
#17
,
|
|
|
ага!
исправил на size_t vt = strlen(context); после сравнения в обеих переменных cmp1 и cmp2 значится -3 но странно что в ch1 после работы второй MD5 получается строка с двойным хэшем, т.е. первый и второй вместе это же вроде как не правильно или можно забить |
Сообщ.
#19
,
|
|
|
это как должно выглядеть?
|
Сообщ.
#20
,
|
|
|
Также, только без цикла в конце, и без лишнего буфера
|
Сообщ.
#21
,
|
|
|
Цитата woojin @ но странно что в ch1 после работы второй MD5 получается строка с двойным хэшем ничего странно, там не нультерминированная строка вообще static const size_t _sz = 32; char hash1[_sz + 1] = {0}; char hash2[_sz + 1] = {0}; |
Сообщ.
#22
,
|
|
|
Склеивается у тебя потому что ты в любом случае нвозвращаешь не строку
Добавлено В Си строке отличается от массива только тем, что последний элемент у нее – ноль |
Сообщ.
#23
,
|
|
|
Цитата Олег М @ Также, только без цикла в конце, и без лишнего буфера оно: void MD5 (const char* context, char* out, size_t size_out) { MD5_CTX ctx; MD5_Init(&ctx); size_t vt = strlen(context); MD5_Update(&ctx, (unsigned char*) context, vt); unsigned char tmp[16]; MD5_Final(tmp, &ctx); } но при этом же в out ни чего не будет! Цитата shm @ ничего странно, там не нультерминированная строка вообще Цитата Олег М @ Склеивается у тебя потому что ты в любом случае нвозвращаешь не строку Добавлено 1 минуту назад В Си строке отличается от массива только тем, что последний элемент у нее – ноль попробую добавить 33-й символ, что бы так было: static const size_t _sz = 33; char ch1[_sz] = {'\0'}; char ch2[_sz] = {'\0'}; Добавлено с 33-м ни чего не приклеивается |
Сообщ.
#24
,
|
|
|
Цитата woojin @ но при этом же в out ни чего не будет! Будет, если out подставишь вместо tmp Добавлено Цитата woojin @ с 33-м ни чего не приклеивается Еще бы. Но они у тебя совпадали, с начала. |
Сообщ.
#25
,
|
|
|
Цитата md5.cpp:22:5: error: no matching function for call to 'MD5_Final' MD5_Final(out, &ctx); ^~~~~~~~~ ./md5c.h:64:6: note: candidate function not viable: no known conversion from 'char *' to 'unsigned char *' for 1st argument void MD5_Final (unsigned char [16], MD5_CTX *); ругается! ну в принципе правильно, tmp был 16, а out 32 |
Сообщ.
#26
,
|
|
|
Нет. Потому что у тебя out объявлен как char*, а надо как unsigned char*
|
Сообщ.
#27
,
|
|
|
на "моей" функции пример покажи, как мне это сделать, что бы потом можно было возвращаемое значение использовать в сравнении
|
Сообщ.
#28
,
|
|
|
примерно так
void MD5 (const char* context, unsigned char* out, size_t size_out) { MD5_CTX ctx; MD5_Init(&ctx); size_t vt = strlen(context); MD5_Update(&ctx, (unsigned char*) context, vt); MD5_Final(out, &ctx); } ................. static const size_t _sz = 16; unsigned char hash1[_sz] = {0}; unsigned char hash2[_sz] = {0}; MD5(...., hash1, _sz); MD5(...., hash1, _sz); if (memcmp(hash1, has2, _sz) != 0) //NOT_EQUAL |