Максимальна довжина вводу / виводу 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 Як зазначено у відповіді, вхід має довільну довжину. Це означає, що параметр може бути будь-якої необхідної вам довжини.
хтоjeteri

1
@ Peping Невелика корекція: вхід може бути таким, скільки може використовуватися використаний тип даних в мові програмування. Приклад: рядки Java використовують масив внутрішньо, тому рядок може містити лише (2 ^ 31) -1 символів (або менше, залежно від розміру купи). Це також було б вашим максимальним входом для функції MD5 в Java. Але чисто теоретично, функція MD5 дійсно могла б обробити введення довільної довжини. ;)
RicoBrassers

38

Додайте довжину

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

  • Хеш - це завжди 128 біт. Якщо ви кодуєте його як шістнадцятковий рядок, ви можете кодувати 4 біти на символ, даючи 32 символи.
  • MD5 - не шифрування. Загалом, ви не можете "розшифрувати" хеш MD5, щоб отримати початковий рядок.

Детальніше дивіться тут .


Довжина повідомлення необмежена , що означає повідомлення ? Це вхід? Моє запитанняMD5("how many characters exactly?");
Шафізаде

@Shafizadeh Ваш текст може бути якомога довшим у вашій поточній мові програмування, у Java це буде (2 ^ 31) -1 символ у рядку. І так, "повідомлення" - це вхід.
RicoBrassers

@Shafizadeh ... або з файлу, вхід може бути таким же великим, як і наявне сховище.
ToolmakerSteve

9

Ви можете мати будь-яку довжину, але, звичайно, може виникнути проблема з пам'яттю на комп’ютері, якщо введення String занадто довге. Вихід завжди 32 символи.


4
Якщо рядок введення занадто довгий, він не існував би в системі, якщо тільки він не є у файлі, і в цьому випадку ви можете переходити в блоках до функції перебору під час читання, іншими словами, вам потрібно лише мати blockбайти вхідних даних одночасно.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

6

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

Якщо є обмеження для введення, воно може надходити з середовища, де використовується хеш-функція. Скажімо, ви хочете обчислити файл, а середовище має обмеження MAX_FILE.

Але вихідний рядок завжди буде однаковим: 32 шістнадцяткових символів (128 біт)!



4

Ви можете використовувати SHA-1 замість MD5 , оскільки MD5 вважається порушеним.

Більше про вразливості MD5 можна прочитати в цій статті Вікіпедії .


5
це не більше, ніж чутка. MD5 достатньо хороший для більшості звичайних завдань веб-розробки
Your Common Sense

11
Її творець, а також Брюс Шнайер та Національна безпека погоджуються, що це порушено ... Скільки ще "чуток, що слухають чуток", потрібно, щоб переконати вас у тому, що воно справді було порушено на деякий час? Справа в тому, що довільно легко знайти вхід, який генерує певний хеш. Звичайно, ви можете пом'якшити цей ризик, посоливши свої входи, використовуючи досить великі солі. З боку - примітка: SHA-1 вважається таким же розбитим. Якщо ви радите людям модернізувати, порадьте їх перейти на SHA-2, будь ласка.
Кандер

3
@ kander ой мені дуже мало. Приклад. Давши хеш, ви принесете рядок джерела? Чи не посилання на якусь чудову статтю, не чиюсь думку, а просто джерельний рядок?
Твій здоровий глузд

2
Ніхто насправді не згадав, що вони насправді мають на увазі під терміном "зламаний". Хоча, @YourCommonSense має сенс.
JSmyth

4
Ви говорите про використання MD5 для безпеки. Але MD5 (або будь-яка інша техніка хешування) має безліч інших цілей. Я, наприклад, хочу використовувати його для перейменування файлу за його хешем. Мене точно не турбує опір зіткнення MD5. Все, що ви розмістили, як і раніше правда, лише мої 2 копійки.
tfrascaroli

3

Немає обмежень для введення md5, про який я знаю. Деякі реалізації вимагають, щоб весь вхід був завантажений у пам'ять перед передачею його у функцію md5 (тобто реалізація діє на блок пам'яті, а не на потік), але це не обмеження самого алгоритму. Вихід завжди - 128 біт. Зауважте, що md5 - це не алгоритм шифрування, а криптографічний хеш. Це означає, що ви можете використовувати його для перевірки цілісності фрагмента даних, але ви не можете змінити хешування. Також зауважте, що md5 вважається порушеним, тому не слід використовувати його для будь-якого пов'язаного з безпекою (все-таки добре перевірити цілісність завантажених файлів тощо).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.