Md на C++

sergg

Member
09.05.2010
18
0
#1
Хочу написать на Си++ реализацию 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; //заполняем нулями 
}
//Step2:
unsigned long lengthBit=(unsigned long)length*8; //представление длины входящего сообщения в битах
unsigned char Bits[8]; //массив для 64-разрядного представления длин входящего сообщения
//далее заполняем массив младшими битами каждого байта
Bits[0]=lengthBit & 0xFF;
Bits[1]=(lengthBit >> 8) & 0xFF;
Bits[2]=(lengthBit >> 16) & 0xFF;
Bits[3]=(lengthBit >> 24) & 0xFF;
Bits[4]=(lengthBit >> 32) & 0xFF;
Bits[5]=(lengthBit >> 40) & 0xFF;
Bits[6]=(lengthBit >> 48) & 0xFF;
Bits[7]=(lengthBit >> 56) & 0xFF;

for(int i=0;i<8;i++) //каждый элемент массива Bits[]
{
inChar[size-8+i]=Bits[i]; //вставляем в последние 8 байт выравненной строки
}
Вот это моя реализация первого и второго шага в соответствии с алгоритмом с википедии.

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

Спасибо.