Другие языки программирования и технологии

Алгоритм MD5

В алгоритме MD5 есть четыре слова A,B,C,D(слово-32 битная последовательность) которые являются инициализирующими векторами (им присваивают значения изначально) а позже и промежуточными вычислениями. Скажите, как точно нужно инициализировать (слышал про разные версии) и обязательно ли в двоичном представлении все четыре слова должны быть в размере 32 бита (так как при последующих побитовых операциях в алгоритме у одного из слов может не хватить бита и что тогда?)
Ulugbek Khusanov
Ulugbek Khusanov
182
Почитай википедию. Не вникал в тонкости реализации, но алгоритм строгий и числа конкретно указаны, а если они будут другие, то результат будет тоже другой. Потому строго следуй реализации, да и для каждого языка есть уже готовый код, че изобретать велосипед?
Стёпа Ловков
Стёпа Ловков
84 107
Лучший ответ
хрен знает, я вызываю $str=md5($str) и мне хвататет
Алтай Нурбеков
Алтай Нурбеков
65 689
Если я правильно понимаю, то эти числа должны представлять собой "простое число", то есть полином, который ни на что больше не делится. Обычно при вычислении контрольных сумм поступают именно так. В частности, для CRC даже вариантов не особо много такой разрядности.
http://ru.wikipedia.org/wiki/CRC#.D0.9F.D0.BE.D0.BF.D1.83.D0.BB.D1.8F.D1.80.D0.BD.D1.8B.D0.B5_.D0.B8_.D1.81.D1.82.D0.B0.D0.BD.D0.B4.D0.B0.D1.80.D1.82.D0.B8.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.BD.D1.8B.D0.B5_.D0.BF.D0.BE.D0.BB.D0.B8.D0.BD.D0.BE.D0.BC.D1.8B
Алгоритм MD5 описан в RFC 1321. Там же есть его реализация на С.

Специально для вас:
ABCD - единое 128-битное число (32*4 = 128). Это слово инициализируется на старте, потом вычисляется ABCD=шаг (ABCD, <512-битный кусочег файла>) до тех пор пока файл не кончится (последний кусочег модифицирован и содержит длину файла) .
Последнее вычисленное число ABCD мы называем MD5 файла.

Почему это слово разрезали на 4 части? Так написали алгоритм для 32-битных регистров. Можно было не резать, или резать на два 64-битных числа. Но тогда алгоритм был бы другой. Не нравится - составляйте свой, только функция шаг () ОБЯЗАНА возвращать то же, что и в стандартной реализации.

"Чем инициализировать? " В RFC написано чем, на это были свои соображения. В общем без разницы, но это не будет уже MD5.
"Не хватит бита и что тогда? " Следовать алгоритму, не вы его придумали - не вам его менять.

ЗЫ
MD5 придумали, когда MD4 был взломан. И поскольку не вели MD6, он достаточно надёжен.
Если вы в MD5 что-то меняете, доверия к такому алгоритму уже нет.
Влад Павлушин
Влад Павлушин
11 112
Сложный вопрос для начала