id: Гость   вход   регистрация
текущее время 09:02 02/05/2024
Автор темы: Гость, тема открыта 07/05/2010 18:49 Печать
Категории: криптография
создать
просмотр
ссылки

MD5 на C++


Хочу написать на Си++ реализацию MD5, пишу в C++Builder.
Я нашел откуда скачать реализованный алгоритм, но там не очень понятно, поэтому решил писать сам по алгоритму с википедии(http://ru.wikipedia.org/wiki/MD5).
Первый шаг реализовал так: Код


String GetHash(String in)
{
int length=in. Length(); //Длина входящего сообщения.
int rests=length%64; //остаток от деления на 64байта(512бит).
int size=0; //размер расширенного сообщения.


if(rests<56) //если остатот от деления меньше 56
{
size=length-rests+56+8; //подгоняем длину сообщения, что бы была кратна 64(+8байт для шага 2)
}
else //иначе
{
size=length+64-rests+56+8; //подгоняем длину сообщения, что бы была кратна 64(+8байт для шага 2)
}


unsigned char *inChar=new unsigned char[size]; //массив char, в котором будет храниться входящее сообщение с расширенной длиной.


for(int i=0;i<length;i++) //от 0 символа до length
{
inChar[i]=in[i+1]; //заполняем первые length символов inChar символами из входщей строки
}


inChar[length]=128; //добавляем 1 бит в конец потока(128(Dec)=0x80(HEX)=1000000(Bin))


for(int i=length+1;i<size;i++) //оставшуюся часть
{
inChar[i]=0; //заполняем нулями
}


Вот это моя реализация первого шага в соответствии с алгоритмом с википедии.


Расскажите пожалуйста, что тут не так(если что-то не так) и поясните, что от меня требуют во втором шаге(а то я не очень пониммаю). И что такое массив X (в шаге 3)?


Спасибо.


 
Комментарии
— Почкин (09/05/2010 05:23)   <#>
Не надо реализовывать приведённый наивный алгоритм. Лучше всего чтобы хэш умел инициализироваться, добавлять любые данные в промежуточное значение хэш суммы и финализировать расчёт когда нужно, досчитывая то что осталось в буфере. Воспользовавшись гуглом можно найти грамотную реализацию хэширования.
— XVilka (11/05/2010 02:31, исправлен 11/05/2010 20:51)   профиль/связь   <#>
комментариев: 13   документов: 0   редакций: 1

Рекомендую использовать все-таки sha256 – он дефакто стандарт сейчас для хешей. Да и реализаций его в интернете полно на всех языках программирования.


Если в учебных целях – то советую посмотреть Trivium. Он как-то поинтереснее и поперспективнее, хоть и не хеш-функция, но как алгоритм очень интересный.


А вот его реализация http://www.ecrypt.eu.org/strea.....submissions/trivium/

Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3