Реализация алгоритма MD5
От: _Sphinx_ Россия http://www.rogov.su
Дата: 22.12.06 16:48
Оценка:
Всем привет!

Минут 15 думал куда это запостить, так и не придумал... Решил сюда...

Делал тут тривиальное хранение паролей на диске ну и решил писать в файлы MD5 хеши. У меня сервер на C++ (native) а клиенты под .NET. На сервер работает алгоритм вычисления хеша, взятый, насколько я понимаю, из поставки FreeBSD. По крайней мере в заголовочнике того файла ивеется комментарий вот такого вида:

/* MD5.H - header file for MD5C.C
 * $FreeBSD$
 */

/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
rights reserved.

.....
 */


данный заголовок вызывает доверие и заставляет меня верить в то, что вычисление хеша там реализовано правильно... Соответственно, на клиенте хеши считаются с помощью MD5CryptoServiceProvider.

Запустив все это дело я с удивлением обнаружил, что для одних и тех же данных хеш-коды на клиенте и на сервере — разные... посравнивал хеши и вот что получилось:

Source textMD5 in CMD5 in .NET
123456e10adc3949ba59abbe56e057f20f883ee1adc3949ba59abbe56e057f2f883e
Test dataca1ea02c10b7c37f425b9b7dd86d5e11ca1ea02c10b7c37f425b9b7dd86d5e11
1001100110018e24a6a0424e0f906c04afc02cbc629d8e24a6a0424ef906c4afc02cbc629d
ну, это вполне достаточно, чтобы понять...

Итак, невооруженным взглядом видна причина проблемы: полученный хеш по-разному преобразовывается в строку. В тех случаях, когда получается байт со значением, например 15 или тому подобным, сишный алгоритм пишет в строку "0f", другой же этот ноль отбрасывает и пишет просто "f".

Вот теперь, собственно, вопрос: а как принято писать их правильно? ведущие нули оставлять или убивать их?
ICQ: 203-009-172
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.