Генератор MD5-хеша
Онлайн шифрование MD5, поддерживает 16-битный и 32-битный вывод, преобразование регистра
Настройки формата
Что такое шифрование MD5?
MD5 (Алгоритм дайджеста сообщения 5) — это широко используемая криптографическая хеш-функция, разработанная американским криптографом Рональдом Ривестом в 1991 году. MD5 может отображать данные любой длины в фиксированное 128-битное (16-байтовое) хеш-значение, обычно представленное 32 шестнадцатеричными цифрами. MD5 широко использовался для проверки целостности данных, хранения паролей и цифровых подписей. Однако в 2004 году китайский криптограф Ван Сяоюнь и её команда обнаружили уязвимости столкновений в MD5, позволяющие злоумышленникам создавать два разных набора данных с одинаковым значением MD5. Поэтому MD5 больше не подходит для сценариев, чувствительных к безопасности. Форматы вывода MD5 бывают двух типов: стандартный 32-битный (полное хеш-значение) и усеченный 16-битный (берутся средние 16 символов из 32-битного значения). Этот инструмент поддерживает оба формата вывода с опциями отображения в верхнем или нижнем регистре.
Как использовать
Как пользоваться
- Введите текст для шифрования в поле ввода
- Выберите формат вывода: верхний регистр 32 бита, нижний регистр 32 бита, верхний регистр 16 бит или нижний регистр 16 бит
- Значение MD5 будет рассчитано и отображено автоматически
- Нажмите кнопку «Копировать», чтобы скопировать результат
Описание формата вывода
- Используйте 32-символьный вывод, когда нужен полный дайджест MD5 для контрольных сумм, ключей кэша или устаревших полей API.
- Используйте 16-символьный вывод только тогда, когда устаревшая система явно ожидает средние 16 символов полного дайджеста.
Описание регистра
- Значения MD5 в верхнем и нижнем регистре содержат одни и те же шестнадцатеричные байты; различие заключается только в формате отображения.
- При сравнении значений MD5 учитывайте точный регистр, требуемый целевой системой, чтобы избежать ложных несовпадений.
Применение
Технический принцип
MD5 (Message-Digest Algorithm 5) был разработан Рональдом Ривестом в MIT в 1991 году и опубликован как RFC 1321, заменив взломанный MD4. На протяжении 1990-х и 2000-х годов он был основной хеш-функцией: проверка целостности файлов, хранение паролей (небезопасное, без соли), цифровые подписи, отпечатки вредоносного ПО и дайджест по умолчанию в самых разных инструментах — от `md5sum` и MySQL `MD5()` до старого хранилища объектов Git и `openssl dgst -md5`. Выход — 128 бит (16 байтов), почти всегда отображаемые как 32 шестнадцатеричных символа в нижнем регистре. Архитектура следует схеме Merkle–Damgård: сообщение дополняется до кратности 512 битам, затем добавляется 64-битная длина в little-endian, после чего по каждому 512-битному блоку итерируется функция сжатия. 128-битное состояние отражено в четырёх 32-битных регистрах A, B, C, D, инициализированных фиксированными константами (0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476 — выбраны как «nothing-up-my-sleeve» значения: это квадратные корни из 2, 3, 5, 10 в little-endian). Каждый 512-битный блок разбивается на шестнадцать 32-битных слов M[0..15] и проходит 4 раунда по 16 шагов (всего 64 шага). Раундовые функции: F = (X AND Y) OR (NOT X AND Z), G = (X AND Z) OR (Y AND NOT Z), H = X XOR Y XOR Z, I = Y XOR (X OR NOT Z); каждый шаг комбинирует одну раундовую функцию, слово сообщения, раундовую константу T[i] = floor(2^32 · |sin(i+1)|) и циклический сдвиг влево на величину, специфичную для шага, затем прибавляет результат обратно к состоянию. Замысел четырёх раундов: раунд 1 быстрый и нелинейный, раунд 2 параллелизуемый, раунд 3 агрессивнее смешивает, раунд 4 завершает сильной диффузией. Итоговое состояние — это MD5 всего сообщения; именно это делает MD5 однонаправленной функцией в предквантовом смысле. Крах: устойчивость к коллизиям нарушена, и для криптографического применения это единственное, что имеет значение. Ван Сяоюнь и соавторы опубликовали полную коллизионную атаку в 2004 году (атаки CFRG сократили поиск коллизий до нескольких часов на ПК). В 2008 году исследователи использовали коллизии MD5 для подделки действительного сертификата CA (атака «chosen-prefix collision» Стивенса и соавторов), а в 2012 году вредоносная программа Flame злоупотребила ещё не раскрытой коллизией MD5 для подделки сертификата подписи кода Microsoft. Статья 2004 года сократила пространство поиска коллизий с 2^64 до примерно 2^24, так что любой атакующий с несколькими часами вычислений может получить два сообщения с одинаковым MD5. После Flame Microsoft явно запретил MD5 в Authenticode; браузеры отозвали TLS-сертификаты, подписанные MD5, в 2014–2017 годах; а IETF давно признал MD5 устаревшим в TLS, SSH и IPsec. Показатели производительности на современном ноутбуке x86-64: MD5 хеширует на скорости 400–700 МБ/с на ядро (ограничено пропускной способностью памяти на больших входах), SHA-256 — 200–300 МБ/с, SHA-512 быстрее на 64-битных CPU благодаря операциям с 64-битными словами. Для хеширования паролей MD5 непригоден вне зависимости от пропускной способности — bcrypt/scrypt/Argon2id намеренно настраиваемые, чтобы противостоять GPU-ускорению. На одном RTX 4090 Hashcat показывает MD5 примерно 60 GH/s (гигахешей в секунду) — в 7–8 раз быстрее SHA-256 на том же GPU. Именно этот разрыв делает MD5 опасным: GPU перебирает предварительно вычисленные таблицы за часы, а не годы. Web Crypto `crypto.subtle.digest('MD5', bytes)` работает на скорости диска в Chrome, Edge и Firefox 102+; в старых браузерах используется чистый JS (SparkMD5 или собственная реализация страницы) со скоростью 50–150 МБ/с. Тестовые векторы из RFC 1321: пустая строка хешируется в d41d8cd98f00b204e9800998ecf8427e, 'a' — в 0cc175b9c0f1b6a831c399e269772661, 'abc' — в 900150983cd24fb0d6963f7d28e17f72. Если ваш результат не совпадает с этими значениями, причина почти всегда в проблеме кодировки (передача JS-строки в реализацию MD5 вместо UTF-8 байтов), а не в самом алгоритме.
- Конструкция Merkle–Damgård делает MD5 уязвимой к атаке удлинения: зная H(secret || msg), атакующий может вычислить H(secret || msg || padding || extra), не зная secret. Поэтому MD5(secret || message) не является безопасным MAC — используйте HMAC-MD5 (RFC 2104) или HMAC-SHA256, которые применяют другую структуру (двухключевой вложенный хеш), устойчивую к этой атаке.
- Тестовые векторы (RFC 1321): пустая строка хешируется в d41d8cd98f00b204e9800998ecf8427e, 'a' — в 0cc175b9c0f1b6a831c399e269772661, 'abc' — в 900150983cd24fb0d6963f7d28e17f72. Если ваша реализация не выдаёт этих значений, причина почти всегда в проблеме кодировки (передача JavaScript-строки в JS-реализацию MD5 вместо UTF-8 байтов через TextEncoder), а не в самом алгоритме.
- Скорость хеширования: одно ядро современного x86-64 CPU обрабатывает MD5 примерно 400–700 МБ/с, ограничено пропускной способностью памяти на больших входах. SHA-256 примерно на 30% медленнее — 200–300 МБ/с, а SHA-512 быстрее на 64-битных CPU, поскольку оперирует 64-битными словами. Для хеширования паролей правильный выбор — bcrypt (cost factor 12) / scrypt / Argon2id, которые намеренно медленны и настраиваемы для противодействия GPU-ускорению.
- Четыре раундовые функции F, G, H, I были намеренно названы так, чтобы читаться как предложение («FiGiHI» / «figi hi») — подпись Ривеста. Каждая использует только побитовые операции и различную структуру смешивания, чтобы алгоритм не вырождался в линейную или аффинную систему при криптоанализе. Концепция S-боксов из DES / AES в MD5 отсутствует; безопасность обеспечивается расширением слов сообщения и константами сдвига, а не таблицами подстановок.
- Бенчмарк Hashcat на одном RTX 4090: примерно 60 GH/s для MD5 (по чистому хешу) и 30 GH/s для MD5 с солью. SHA-256 на том же GPU — 8 GH/s. 7–8-кратный разрыв — вот почему атакующие любят MD5: GPU перебирает предварительно вычисленные таблицы за часы, а не годы. Используйте SHA-256, bcrypt или Argon2id для всего, что должно выдерживать офлайн-атаку.
- «Двойной MD5» (MD5(MD5(x))) встречается в старом коде на PHP и MySQL, часто с солью. Он не помогает против коллизионных атак (коллизия MD5 есть коллизия MD5(MD5()) с O(1) дополнительной работы) и лишь незначительно замедляет поиск прообраза (в 2 раза). Современное хеширование паролей (Argon2id из RFC 9106, scrypt из RFC 7914, bcrypt с cost ≥ 12) — единственно верный ответ для хранения паролей; если вы видите MD5 в современном столбце паролей, это ошибка.
- Миграция с MD5: если вы поддерживаете систему, использующую MD5, правильная стратегия — двойная запись (вычислять и MD5, и SHA-256 при чтении, предпочитать SHA-256 в новых кодовых путях) на период отказа, а затем убрать MD5, как только от него ничего не зависит. Для протоколов, жёстко требующих MD5 (NTLM, RADIUS challenge-response, некоторые режимы Kerberos), MD5 не исчезнет в ближайшее время — Microsoft обновил NTLM для использования AES в 2010 году, но старая версия по умолчанию включена ради совместимости, и вам следует полностью отключить NTLMv1, если в сети есть устаревшие Windows-системы.
- Реализация на странице: когда Web Crypto доступен (Chrome, Edge, Firefox 102+), используется `crypto.subtle.digest('MD5', utf8Bytes)`, работающий на нативном коде на скорости диска. Когда недоступен, используется чистая JS-реализация (SparkMD5 0.7 или собственная реализация страницы) со скоростью 50–150 МБ/с. Обе дают идентичный результат, поэтому тестовые векторы проходят для обоих бэкендов. Этап кодирования — `new TextEncoder().encode(str)`, который всегда выдаёт UTF-8 байты; не передавайте JavaScript-строку напрямую в чистую JS-реализацию MD5, иначе на любом не-ASCII входе вы получите неверный хеш.
Примеры
Пустая строка и короткий текст
Пустая строка -> d41d8cd98f00b204e9800998ecf8427e
hello -> 5d41402abc4b2a76b9719d911017c592
RFC: RFC 1321, раздел A.1 определяет эти тестовые векторыЧувствительность к регистру
hello world -> 5eb63bbbe01eeed093cb22bb8f5acdc3
Hello -> 8b1a9953c4611296a827abf8c47804d7
HELLO -> eb61eead90e3b899c6bcbe27ac581660
Замечание: изменение одного символа полностью меняет хеш (лавинный эффект)Числа и пунктуация
123456 -> e10adc3949ba59abbe56e057f20f883e
Hello, World! -> 65a8e27d8879283831b664bd8b7f0ad4
file.txt -> 3d8e577bddb17db339eae0b3d9bcf180
Замечание: любое изменение пунктуации или пробелов даёт совершенно другой дайджестПочему MD5 не рекомендуется для безопасности
Атака с коллизиями: в 2004 году исследователи нашли способы создавать два разных
сообщения с одинаковым хешем MD5. Это ломает цифровые подписи и
проверку сертификатов.
Для безопасности используйте SHA-256 или SHA-3:
MD5: 128 бит, стойкость к коллизиям нарушена (атака осуществима)
SHA-256: 256 бит, практических коллизий не найдено
SHA-512: 512 бит, ещё больший запас прочности
NIST: NIST исключил MD5 из криптографического использования с 2005 года
Применение: MD5 по-прежнему пригоден для проверки целостности файлов, дедупликации и ключей кешаЧасто задаваемые вопросы
Что такое MD5?
MD5 (Message Digest 5, RFC 1321) — это 128-битная хеш-функция, опубликованная Роном Ривестом в 1991 году. Она всегда возвращает 32 шестнадцатеричных символа независимо от длины ввода, и при изменении даже одного бита входа выход меняется полностью. Она быстрая — сотни МБ/с на современном CPU.
Безопасен ли MD5?
Не для задач безопасности. Атаки на коллизии MD5 практичны с 2004 года, а коллизии с выбранным префиксом — с 2007-го. Не используйте MD5 для цифровых подписей, хешей сертификатов, хранения паролей или любого контроля целостности, где злоумышленник может выбирать вход.
Где MD5 ещё уместен?
Для обнаружения случайных повреждений: контрольные суммы загрузок, простая дедупликация доверенных файлов, быстрые отпечатки в стиле ETag. Многие вендоры по-прежнему публикуют MD5 для обратной совместимости, часто рядом с SHA-256.
Расчёт выполняется локально?
Да. MD5 вставленного текста вычисляется в вашем браузере. Ничего не загружается и не логируется. Можете проверить это во вкладке Network во время хеширования.
Почему одна и та же строка даёт другой MD5 в другом инструменте?
Почти всегда из-за скрытой разницы в символах: BOM UTF-8, замыкающий перевод строки, CRLF вместо LF, либо один инструмент кодирует в UTF-8, а другой — в UTF-16. Сам алгоритм MD5 полностью детерминирован во всех реализациях.
MD5 в верхнем и нижнем регистрах — это одно и то же?
Да. 128 бит на выходе одинаковы; регистр — это просто соглашение об отображении. Сравнивать значения нужно без учёта регистра.
Чем MD5 отличается от MD5(salt + password)?
Простой MD5 пароля тривиально ломается радужными таблицами. Добавление соли блокирует предвычисленные таблицы, но MD5 всё равно слишком быстр для хеширования паролей. Для паролей используйте bcrypt/scrypt/Argon2; MD5 (с солью или без) для этой задачи не подходит.