У меня несколько вопросов по md5 ().
1. Почему md5 () всегда возвращает хеш длиной 32 байта? Даже если переданный текст 100 байт. Что она делает с текстом? Обрезает?
2. Можно ли декодировать md5 ()? Если да, то как?
а почему луна на нас не падает? земля же ее притягивает!
аналогично твоему вопросу.
такие вещи знают почти все форумчане
// обратись к разработчикам,они те покажут как она работает
Есть специальный математический алгоритм.
Представь, что любая строка в мире имеет уникальный номер.
например,
a - 11111111111111111111111
b - 11111111111111111111112
c - 11111111111111111111113
При этом может использоватся не только цифры, а ещё и буквы от a-f(другая система числения, чтобы больше цифр вмещалось).
md5() позволяет каждой строке в мире получать УНИКАЛЬНЫЙ номер, который называется хешем.
Но так как подобрать все строки в мире тяжело, то получив ключ, ты не всегда можешь знать, от каких дверей этот ключ. Есть популярные двери, которые можно открыть, но если ключ специфичен - то подбор нужных дверей(строки) становится зачастую невозможным или может занять не один год.
Как математические алгоритмы делают уникальный шифр - можешь почитать на википедии, но вряд ли ты это поймёшь(лично я не понял).
Фактически, алгоритм рассчитан на то, чтобы каждая строка имела уникальный номер(хеш), но иногда встречаются одинаковые хеши, но это - необычайная редкость.
грубо говоря так.
Итог - хеш - это как порядочное число. А из-за того, что в мире существует ОЧЕНЬ много строк, то подобрать ту, которая соответствует нужному хешу становится практически невозможным.
То есть, хеш хранит не саму строку, а только информацию о ней.
32 байта - это 2 в 5 степени.
Почему именно это число?
Можно и больше, есть и 64-байтные хеши, есть и 128 и 256 и больше. Но обычно даже 32 хватит для всех строк мира.
32 в 31 степени это 4,56e+46 (4.5 с 46 нолями, грубо говоря). Если я ошибся в подсчёте - математики, поправьте меня, я музыкант)(кажется, может это 32 в 16 степени, или, ещё хуже - 32 в 31 и в 16, забыл как точно).
Единственный способ "декодировать" md5 - это подобрать исходную строку - то есть, перебирать все строки, которые только можно представить, пока не получится хеш, равный искомому.
А чтобы все эти строки перепроверить - нужен будет не один десяток год. А чтобы все строки хранить - не один петтабайт, то есть, пока что технически невозможно.
Подбор md5 идёт по тому, что в базах хранятся самые вероятные строки, которые могут зашифровать.
Поэтому и рекомендуют не использовать 12345, qwerty, abc, Вася, и прочие пароли - так как они уже существуют в базах. А если использовать сложный пароль типу qw588!>?& то, конечно, в базе его не будет, что значит, что возможность узнать, что за строка по его хешу будет невозможной в ближайшие десятилетия.