LINUX.ORG.RU

MD5 Linux и Win


0

2

Добрый день. У меня есть исходник на Си — вычисление MD5 строки. Все хорошо компилируется в gcc (Linux) и в Win (Dev-C++). Но в разных системах, возвращает разный результат. Быть может дело в кодировке?

Как заставить gcc и Dev-c++ выводить русские буквы?

Или подскажите исходник для Linux и Win, который работал бы одинаково.



Последнее исправление: Ultimate (всего исправлений: 1)
Ответ на: комментарий от rival

Если оно берёт md5 от строки с русскими буквами, то от выбора кодировки зависит фактическое содержание строки и, следовательно, её md5-хеш.

// врио К.О.

Alan_Steel ★★
()
Ответ на: комментарий от kiichiro

> Я думаю, это 2 совершенно разных вопроса, заданных в одном сообщении.
Я тоже, но хотел убедиться.

rival ★★
()
Ответ на: комментарий от Alan_Steel

Если оно берёт md5 от строки с русскими буквами, то от выбора кодировки зависит фактическое содержание строки и, следовательно, её md5-хеш.

Вывод русских букв.

rival ★★
()
Ответ на: комментарий от rival

<предположение>
Файл исходника был скопирован с одной системы на другую. В одной из них русские буквы в строке внутри исходника стали выглядеть кракозяблами. Это было, конечно, пофиксено повторным набором строки. Однако, md5 у неё оказался другой. Естественно, виноват gcc или dev-c++, один из которых «не выводит» русские буквы.
</предположение>

Alan_Steel ★★
()

А как строка в твою программу попадает? Если ты конвеером ее передаешь, то мог передать и \n туда случайно. Тем более перенос строк в lin и win разный.

ostin ★★★★★
()

Вот исходник >> http://ifolder.ru/21324111

В main() объявляю char test[]=«hello»; Затем в MDString() собственно происходит вычисление MD5 с помощью трех функций MDInit,MDUpdate,MDFinal. В итоге получаю миссив в 16 байт, и вывожу его for(;k<16;k++) printf(«%d »,digest[k]);

По идее в Linux и Win числовая последовательность должна быть одинаковая ..но увы...

Ultimate
() автор топика
Ответ на: комментарий от Ultimate

Дело не в linux/window, а в вашем говнокоде не способном работать на 64битной системе.например ваш UINT4 нифига не 4 байта на 64битной платформе и таких проблем в коде очень много.

anonymous
()

Случайно не x86 винда и x86-64 linux?

Pavval ★★★★★
()

Поменяйте UINT4 на uint32_t, объявленный в stdint.h. И приведите исходник в нормальный вид, а то код

void MD5Update (context, input, inputLen)

MD5_CTX *context;                                        /* context */

unsigned char *input;                                /* input block */

unsigned int inputLen;                     /* length of input block */

{
это уж очень по-древнему.

tim239 ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.