Другие языки программирования и технологии
Алгоритм MD5
В алгоритме MD5 есть четыре слова A,B,C,D(слово-32 битная последовательность) которые являются инициализирующими векторами (им присваивают значения изначально) а позже и промежуточными вычислениями. Скажите, как точно нужно инициализировать (слышал про разные версии) и обязательно ли в двоичном представлении все четыре слова должны быть в размере 32 бита (так как при последующих побитовых операциях в алгоритме у одного из слов может не хватить бита и что тогда?)
Почитай википедию. Не вникал в тонкости реализации, но алгоритм строгий и числа конкретно указаны, а если они будут другие, то результат будет тоже другой. Потому строго следуй реализации, да и для каждого языка есть уже готовый код, че изобретать велосипед?
хрен знает, я вызываю $str=md5($str) и мне хвататет
Если я правильно понимаю, то эти числа должны представлять собой "простое число", то есть полином, который ни на что больше не делится. Обычно при вычислении контрольных сумм поступают именно так. В частности, для 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
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 что-то меняете, доверия к такому алгоритму уже нет.
Специально для вас:
ABCD - единое 128-битное число (32*4 = 128). Это слово инициализируется на старте, потом вычисляется ABCD=шаг (ABCD, <512-битный кусочег файла>) до тех пор пока файл не кончится (последний кусочег модифицирован и содержит длину файла) .
Последнее вычисленное число ABCD мы называем MD5 файла.
Почему это слово разрезали на 4 части? Так написали алгоритм для 32-битных регистров. Можно было не резать, или резать на два 64-битных числа. Но тогда алгоритм был бы другой. Не нравится - составляйте свой, только функция шаг () ОБЯЗАНА возвращать то же, что и в стандартной реализации.
"Чем инициализировать? " В RFC написано чем, на это были свои соображения. В общем без разницы, но это не будет уже MD5.
"Не хватит бита и что тогда? " Следовать алгоритму, не вы его придумали - не вам его менять.
ЗЫ
MD5 придумали, когда MD4 был взломан. И поскольку не вели MD6, он достаточно надёжен.
Если вы в MD5 что-то меняете, доверия к такому алгоритму уже нет.
Сложный вопрос для начала
Похожие вопросы
- MD5
- PHP. Что будет если получить хэш пароля таким образом: echo md5(md5(md5("SUPER_PUPER_PASS_12345"))); Так надежнее? :)
- PHP - как сделать на сайте "восстановление пароля", если пароли в бд хранятся в виде md5 хеш кодов?
- Расшифровка MD5
- Почему программирование на первый взгляд такое сложное? Потому что многие не умеют составлять алгоритмы?
- Нужно ли быть очень сильным математиком и хорошо уметь конструировать алгоритмы на позиции Software Engineer?
- алгоритм... по нахождению общих элементов двух массивов
- Вопрос про алгоритмы
- Подскажите мне пожалуиста что такое алгоритм и зачем компьютеру. нужен алгоритм.И что такое прога Паскаль и зачем она
- Как может время работы алгоритма не изменятся при переходе к более скоростному алгоритму ?