Что такое калькулятор MD5-хеша?
Калькулятор MD5-хеша вычисляет 128-битную контрольную сумму (дайджест) MD5 для любого введённого вами текста. Алгоритм MD5 (Message-Digest Algorithm 5, описанный в RFC 1321) принимает на вход данные произвольной длины и выдаёт фиксированный «отпечаток» из 32 шестнадцатеричных символов. Один и тот же текст всегда даёт один и тот же хеш, но достаточно изменить хотя бы один символ — и результат будет совершенно другим.
Как пользоваться
Введите или вставьте текст в поле ввода и нажмите кнопку. Калькулятор кодирует ваш текст в байты UTF-8, применяет алгоритм MD5 и возвращает хеш в нижнем регистре в шестнадцатеричном виде, а также длину входных данных в символах и их размер в байтах UTF-8. Оставьте поле пустым, чтобы увидеть известный хеш пустой строки.
Как работает алгоритм
MD5 построен по схеме Меркла — Дамгарда. Сообщение дополняется одним байтом 0x80, затем нулями — до тех пор, пока его длина не станет равной 56 по модулю 64 байта, и наконец в конец добавляется исходная длина в битах в виде 64-битного значения с порядком байтов little-endian. Дополненное сообщение разбивается на блоки по 512 бит, каждый из которых обрабатывается за 64 операции в четырёх раундах с применением нелинейных функций, констант для каждого шага, полученных из функции sin, и циклических сдвигов влево. Четыре 32-битных слова состояния (A, B, C, D) инициализируются фиксированными начальными значениями и обновляются для каждого блока; их итоговая конкатенация в порядке little-endian и есть искомый дайджест.
$$\text{MD5}\!\left(\text{Text}\right) = \text{Hex}_{128}\big(A \Vert B \Vert C \Vert D\big)$$
Разбор примера
Пустая строка ("") содержит ноль байтов. После дополнения она превращается в один блок размером 512 бит, и MD5 возвращает d41d8cd98f00b204e9800998ecf8427e. Текст «hello» (5 байтов) даёт хеш 5d41402abc4b2a76b9719d911017c592.
Частые вопросы
Безопасен ли MD5? Нет. С точки зрения криптографии MD5 считается взломанным — коллизии генерируются без особого труда. Используйте его только для контрольных сумм и неответственных «отпечатков» данных, но не для паролей или цифровых подписей.
Почему число байтов отличается от числа символов? Символы, не входящие в ASCII, занимают в UTF-8 больше одного байта, поэтому строка из 3 эмодзи может весить несколько байтов.
Имеет ли значение регистр букв? Да. «Hello» и «hello» дают совершенно разные хеши.