Я закончил реализацию алгоритма MD5 в C ++, но он не работает должным образом … Мои хеши неверны.
Просто для понимания:
Если я пытаюсь хешировать файл (64 байта) с помощью алгоритма хеширования MD5, должно произойти следующее:
// 512 Bit(data) 512 Bit(Padding)
// ------------- -------------
// |xxxxxxxxxxx| |10000000|64|
// ------------- -------------
//
// 1 - appended 1 Bit
// 0 - filled with zeros until 8 bytes before end of block
// 64 - 64 bit (8 Byte) representation of size of file
1-й: алгоритм MD5 с блоком данных
2-й: создать дополнительный блок с отступом
3-й: алгоритм MD5 с блоком заполнения
Правильно?
Значение 64-битного представления ДОЛЖНО быть в битах, а не в байтах!
Поэтому счетчик в моем случае не 64. Это 64 * 8 = 512.
Других решений пока нет …