Xwab
Форумыnavigate_nextПрограммирование на PHP

Объясните md5 ()
Сообщения
Replikon

У меня несколько вопросов по md5 ().
1. Почему md5 () всегда возвращает хеш длиной 32 байта? Даже если переданный текст 100 байт. Что она делает с текстом? Обрезает?
2. Можно ли декодировать md5 ()? Если да, то как?

14 Июн 2010, 14:24
Fashion

а почему луна на нас не падает? земля же ее притягивает!


аналогично твоему вопросу.

14 Июн 2010, 14:27
Fashion

не расшифровывается оно

14 Июн 2010, 14:27
Replikon

Fashion, не все такие умные как ты. Ответил бы лучше на первый вопрос.

14 Июн 2010, 14:29
Fashion

 такие вещи знают почти все форумчане
// обратись к разработчикам,они те покажут как она работает

14 Июн 2010, 14:31
Fresh

Хм. А внатуре, как всё это работает?

14 Июн 2010, 14:33
Akdmeh

Есть специальный математический алгоритм.
Представь, что любая строка в мире имеет уникальный номер.
например,
a - 11111111111111111111111
b - 11111111111111111111112
c - 11111111111111111111113
При этом может использоватся не только цифры, а ещё и буквы от a-f(другая система числения, чтобы больше цифр вмещалось).
md5() позволяет каждой строке в мире получать УНИКАЛЬНЫЙ номер, который называется хешем.
Но так как подобрать все строки в мире тяжело, то получив ключ, ты не всегда можешь знать, от каких дверей этот ключ. Есть популярные двери, которые можно открыть, но если ключ специфичен - то подбор нужных дверей(строки) становится зачастую невозможным или может занять не один год.
Как математические алгоритмы делают уникальный шифр - можешь почитать на википедии, но вряд ли ты это поймёшь(лично я не понял).
Фактически, алгоритм рассчитан на то, чтобы каждая строка имела уникальный номер(хеш), но иногда встречаются одинаковые хеши, но это - необычайная редкость.

грубо говоря так.
Итог - хеш - это как порядочное число. А из-за того, что в мире существует ОЧЕНЬ много строк, то подобрать ту, которая соответствует нужному хешу становится практически невозможным.
То есть, хеш хранит не саму строку, а только информацию о ней.

14 Июн 2010, 14:41
Akdmeh

32 байта - это 2 в 5 степени.
Почему именно это число?
Можно и больше, есть и 64-байтные хеши, есть и 128 и 256 и больше. Но обычно даже 32 хватит для всех строк мира.
32 в 31 степени это 4,56e+46 (4.5 с 46 нолями, грубо говоря). Если я ошибся в подсчёте - математики, поправьте меня, я музыкант)(кажется, может это 32 в 16 степени, или, ещё хуже - 32 в 31 и в 16, забыл как точно).


__________
посл.ред. 14 Июн 2010, 14:52; всего 1 раз 14 Июн 2010, 14:45
Akdmeh

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

Подбор md5 идёт по тому, что в базах хранятся самые вероятные строки, которые могут зашифровать.
Поэтому и рекомендуют не использовать 12345, qwerty, abc, Вася, и прочие пароли - так как они уже существуют в базах. А если использовать сложный пароль типу qw588!>?& то, конечно, в базе его не будет, что значит, что возможность узнать, что за строка по его хешу будет невозможной в ближайшие десятилетия.

14 Июн 2010, 14:49
Fresh

Круто с ним придумано однако. Спс за инфу.

14 Июн 2010, 14:54
Ответить на тему