Как преобразовать фразы и слова в хэш MD5? - PullRequest
2 голосов
/ 04 апреля 2010

Может кто-нибудь, пожалуйста, объясните мне, как преобразовать фразу типа "Я хочу купить немного молока" в MD5? Я прочитал статью в Википедии о MD5, но приведенное там объяснение выходит за рамки моего понимания:

"MD5 обрабатывает переменную длину сообщение в вывод фиксированной длины 128 бит Входное сообщение не работает до 512-битных блоков (шестнадцать 32-битных байтов целые числа) "

"шестнадцать 32-разрядных целых числа с прямым порядком байтов" мне уже тяжело. Я проверил статью в Вики о маленьких порядках байтов и немного не понял.

Однако примеры некоторых фраз и их хэшей MD5 в этой статье Wiki очень хороши:

MD5 («Быстрая коричневая лиса перепрыгивает ленивая собака ") = 9e107d9d372bb6826bd81d3542a419d6

MD5 («Быстрая коричневая лиса перепрыгивает ленивая собака. ") = e4d909c290d0fb1ca068ffaddf22cbd0

Может ли кто-нибудь, пожалуйста, объяснить мне, как работает этот алгоритм MD5, на очень простом примере?

А также, возможно, вы знаете какое-то программное обеспечение или код, который преобразует фразы в их MD5. Если да, пожалуйста, дайте мне знать.

Ответы [ 3 ]

2 голосов
/ 04 апреля 2010

Забудьте о порядке байтов: это просто название способа кодирования информации.

Давайте следовать статье Википедии MD5 . Вы начинаете с входного сообщения. Он может быть произвольно длинным: хеши MD5 для ISO-файлов размером 2 ГБ обычно создаются, как хеши для строк длиной в дюжину символов (например, для паролей).

Хеш будет содержаться в регистрах a, b, c и d. Эти регистры инициализируются специальными значениями (h0-h3).

Алгоритм разбивает входные данные на 16 4-байтовых блоков («шестнадцать 32-битных слов с прямым порядком байтов») и применяет определенные логические операции (функции F, G, H и I) для части ввода и текущее состояние регистров a, b, c и d. Это делается 64 раза для каждого набора из 16 4-байтовых блоков.

Когда все чанки обработаны, то, что остается в a, b, c и d, является окончательным хешем, который вы можете получить, вызвав md5sum testfile.txt.

Обновление:

Если вы просто хотите вычислить хеш, самостоятельная реализация его не имеет смысла, потому что это было сделано и протестировано, вероятно, для каждого существенного языка:

Python

import md5
md5.new("Nobody inspects the spammish repetition").digest()

SQL ( MySQL ):

SELECT MD5('Nobody inspects the spammish repetition')

Java

String s="Nobody inspects the spammish repetition";
MessageDigest m=MessageDigest.getInstance("MD5");
m.update(s.getBytes(),0,s.length());
System.out.println(new BigInteger(1,m.digest()).toString(16));
* * И т.д. тысяча сорок-девять
1 голос
/ 04 апреля 2010

Md5 - это алгоритм хэширования: он генерирует подпись входного текста, так что изменение любой буквы во вводе окажет значительное, непредсказуемое влияние на подпись.

Например:

Подпись md5 для текста 'Это довольно короткий текст, который выглядит вполне нормально', это '2bb1a5a5204aba95c886b3eb598c9d41'

Подпись md5 того же текста с добавленным периодом: «Это довольно короткий текст, который выглядит вполне нормально». is '870df12558aae47b40bf738290ba8554'

Как видите, там подпись существенно отличается. Это свойство делает md5 подходящим типом «дактилоскопии»: две книги, которые отличаются только одной буквой, имеют совершенно разные md5. Более того, два md5 почти никогда не бывают одинаковыми для любой пары разных книг: столкновения происходят крайне редко.

Существует множество реализаций md5, включая несколько онлайн-версий ( здесь одна ). Если вы хотите использовать язык на определенном языке, укажите, какой именно.

0 голосов
/ 07 апреля 2010

MD5 ужасно сломан и был в течение многих лет. Не используйте для каких-либо целей, если вы можете помочь. В новых приложениях используйте хэш-функцию SHA-2, например SHA-256.

...