Максимальная длина для ввода / вывода MD5

164

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

Арун Давид
источник
2
Следуйте вики: en.wikipedia.org/wiki/MD5
Фрэнк,

Ответы:

240

MD5 обрабатывает сообщение произвольной длины в вывод фиксированной длины, состоящий из 128 битов, обычно представляемых в виде последовательности из 32 шестнадцатеричных цифр.

Даниэль Вассалло
источник
95
Примечание для себя: длина хеша MD5 = 128 bits= 16 bytes=32 hex digits
контрольная сумма
2
[Обычное редактирование] 32 шестнадцатеричных числа, и строка содержит только слова из 'az' и цифры из '0-9'
v1h5
1
Я заметил небольшую ошибку в предыдущих комментариях. Текст должен быть в кавычках :) «32 шестнадцатеричных числа, а строка содержит только буквы от« az »и цифры от« 0-9 »»
Remis B
2
@Shafizadeh Как говорится в ответе, вход имеет произвольную длину. Это означает, что параметр может быть любой необходимой вам длины.
kdojeteri
1
@Peping Небольшое исправление: ввод может быть таким же, как и используемый тип данных на используемом языке программирования. Пример: строки Java используют массив для внутреннего использования, поэтому строка может содержать только (2 ^ 31) -1 символов (или меньше, в зависимости от размера кучи). Это также будет максимальный ввод для функции MD5 в Java. Но чисто теоретически, функция MD5 действительно может обрабатывать ввод произвольной длины. ;)
RicoBrassers
38

Добавить длину

64-битное представление b (длина сообщения до добавления битов заполнения) добавляется к результату предыдущего шага. В маловероятном случае, когда b больше 2 ^ 64, используются только младшие 64 бита b.

  • Хеш всегда 128 бит. Если вы закодируете его как шестнадцатеричную строку, вы можете закодировать 4 бита на символ, давая 32 символа.
  • MD5 это не шифрование. В общем случае вы не можете «расшифровать» хеш MD5, чтобы получить исходную строку.

Подробнее здесь .

Марк Байерс
источник
Длина сообщения не ограничена. Что вы имеете в виду сообщение ? Это вход? Мой вопросMD5("how many characters exactly?");
Шафизаде
@Shafizadeh Ваш ввод может быть максимально длинным на вашем текущем языке программирования, в Java это будет (2 ^ 31) -1 символов в строке. И да, «сообщение» является входом.
RicoBrassers
@Shafizadeh ... или из файла, ввод может быть настолько большим, насколько доступно хранилище.
ToolmakerSteve
9

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

Видар Вестнес
источник
4
Если ввод строки слишком длинный, он не будет существовать в системе в первую очередь, если только он не находится в файле, и в этом случае вы можете передавать блоки в функцию дайджеста по мере их чтения, другими словами, вам нужно только чтобы blockбайты ввода были доступны одновременно.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
6

Алгоритм был разработан для поддержки произвольной длины ввода. Т.е. вы можете вычислять хеши больших файлов, таких как ISO DVD ...

Если есть ограничение для ввода, оно может исходить из среды, где используется хеш-функция. Допустим, вы хотите вычислить файл, и среда имеет ограничение MAX_FILE.

Но строка вывода всегда будет одинаковой: 32 шестнадцатеричных символа (128 бит)!

Ками
источник
4

128-битный MD5-хэш представлен как последовательность из 32 шестнадцатеричных цифр.

Хамид Назари
источник
4

Вы можете использовать SHA-1 вместо MD5 , так как MD5 считается поврежденным.

Вы можете прочитать больше об уязвимостях MD5 в этой статье Википедии .

Daniel Vassallo
источник
5
это не более чем слух. MD5 достаточно хорош для большинства обычных задач веб-разработки
Ваш здравый смысл
11
Его создатель, а также Брюс Шнайер и Служба национальной безопасности согласны с тем, что он сломан ... Сколько еще «слухов» вам нужно, чтобы убедить вас, что оно какое-то время было сломано? Дело в том, что найти произвольно входные данные, генерирующие определенный хеш, очень просто. Конечно, вы можете уменьшить этот риск, засоляя свои материалы, используя достаточно большие соли. С другой стороны: SHA-1 считается сломанным. Если вы советуете людям обновиться, посоветуйте им перейти на SHA-2, пожалуйста.
Кандер
3
@ Kander О, мне нужно очень немного. Пример. Учитывая хеш, вы принесете исходную строку? Не ссылка на какую-нибудь замечательную статью, не чье-то мнение, а просто исходная строка?
Ваш здравый смысл
2
Никто на самом деле не упомянул, что они на самом деле означают под термином «сломанный». Хотя @YourCommonSense имеет смысл.
JSmyth
4
Вы говорите об использовании безопасности MD5. Но MD5 (или любая другая техника хеширования) имеет массу других применений. Я, например, хочу использовать его для переименования файла по его хэшу. Я, конечно, не беспокоюсь о сопротивлении столкновению MD5. Все, что вы опубликовали, все еще правда, только мои 2 цента.
Тфраскароли
3

Нет предела для ввода md5, о котором я знаю. В некоторых реализациях требуется, чтобы весь ввод загружался в память перед передачей его в функцию md5 (т. Е. Реализация воздействует на блок памяти, а не на поток), но это не является ограничением самого алгоритма. Выход всегда 128 бит. Обратите внимание, что md5 - это не алгоритм шифрования, а криптографический хеш. Это означает, что вы можете использовать его для проверки целостности фрагмента данных, но вы не можете отменить хеширование. Также обратите внимание, что md5 считается неработающим, поэтому вы не должны использовать его для чего-либо связанного с безопасностью (все еще можно проверить целостность загруженных файлов и тому подобное).

tdammers
источник