MD5 Hash Generator
Генерирует MD5-хеш из любого текста
Входной текст
MD5-хеш
MD5-хеш появится здесь…
Что такое хеширование MD5?
MD5 (Message-Digest Algorithm 5) — это криптографическая хеш-функция, которая вычисляет фиксированный 128-битный (16-байтный) дайджест из любых входных данных, независимо от их размера. Опубликованный в 1992 году Рональдом Ривестом в RFC 1321, алгоритм MD5 был разработан как более быстрая замена MD4 и быстро стал одной из наиболее широко используемых хеш-функций в интернете. Алгоритм обрабатывает входные данные блоками по 512 бит через четыре раунда по 16 операций каждый, используя различные нелинейные функции в каждом раунде, и возвращает 32-символьный шестнадцатеричный отпечаток.
Хеш-функция — это одностороннее преобразование: для заданных входных данных хеш вычисляется мгновенно, однако восстановить исходные данные только по хешу невозможно. Даже изменение одного бита во входных данных приводит к полностью другому дайджесту — это свойство называется лавинным эффектом. MD5 отображает бесконечное пространство входных данных в фиксированное 128-битное выходное пространство, поэтому коллизии (два разных входа с одинаковым хешем) математически гарантированы, однако в безопасной хеш-функции их нахождение должно быть вычислительно невозможным.
С 2004 года исследователи продемонстрировали практические атаки коллизиями против MD5, поэтому алгоритм более не считается безопасным для цифровых подписей, сертификатов или любых приложений, требующих устойчивости к коллизиям. Тем не менее MD5 по-прежнему широко применяется в незащищённых целях: проверка целостности файлов после загрузки, формирование ключей кэша, дедупликация контента и создание детерминированных идентификаторов из строк. Для таких задач скорость алгоритма и повсеместная поддержка в библиотеках делают его практичным выбором. В 2008 году Марк Стивенс и его коллеги опубликовали атаку на основе коллизии с выбранным префиксом, позволяющую создать два документа с произвольно выбранными префиксами, имеющими одинаковый дайджест. Эта техника была продемонстрирована на Chaos Communication Congress 2008 путём создания поддельного сертификата Удостоверяющего центра. Впоследствии вредоносная программа Flame 2012 года использовала коллизии с выбранным префиксом для подделки сертификата подписи кода Microsoft, позволив вредоносному ПО выдавать себя за легитимное обновление Windows. Эти реальные эксплойты подтвердили, что алгоритм криптографически сломан для любого доверенного применения, и на него не следует полагаться там, где злоумышленник может влиять на хешируемые входные данные.
Зачем использовать этот генератор MD5?
Генерируйте MD5-хеши мгновенно, без установки программ и написания кода. Вставьте текст — и 32-символьный шестнадцатеричный дайджест появится в реальном времени.
Случаи использования MD5
MD5 vs другие алгоритмы хеширования
MD5 — самый быстрый и дающий самый короткий результат среди распространённых хеш-алгоритмов, но он предоставляет наименее надёжные гарантии безопасности. Таблица ниже сравнивает размеры дайджестов, стандарты и подходящие варианты использования для каждого алгоритма.
| Алгоритм | Размер дайджеста | Длина в hex | Стандарт | Лучше всего подходит для |
|---|---|---|---|---|
| MD5 | 128 bits | 32 hex chars | 1992 / RFC 1321 | Checksums, non-security fingerprints |
| SHA-1 | 160 bits | 40 hex chars | 1995 / RFC 3174 | Legacy git commits (being replaced) |
| SHA-256 | 256 bits | 64 hex chars | 2001 / FIPS 180-4 | TLS certificates, blockchain, JWTs |
| SHA-384 | 384 bits | 96 hex chars | 2001 / FIPS 180-4 | Government systems, higher security margin |
| SHA-512 | 512 bits | 128 hex chars | 2001 / FIPS 180-4 | Digital signatures, HMAC with large keys |
| SHA-3 | 256 bits | 64 hex chars | 2015 / FIPS 202 | Post-quantum readiness, backup standard |
| BLAKE3 | 256 bits | 64 hex chars | 2020 | High-performance checksums, Merkle trees |
Как работает MD5
MD5 обрабатывает входные данные через конструкцию Меркла–Дамгарда: сообщение дополняется до кратного 512 битам, разбивается на блоки, и каждый блок проходит через четыре раунда по 16 побитовых операций, смешивающих входные данные с предварительно вычисленными константами, производными от синуса. Результатом является 128-битное состояние, становящееся итоговым дайджестом.
Каждый раунд применяет отдельную нелинейную вспомогательную функцию к трём из четырёх 32-битных переменных состояния (A, B, C, D). Раунд 1 использует F(B,C,D) = (B AND C) OR (NOT B AND D) — побитовый условный селектор. Раунд 2 использует G(B,C,D) = (B AND D) OR (C AND NOT D) — комплементарный селектор. Раунд 3 использует H(B,C,D) = B XOR C XOR D — функцию чётности. Раунд 4 использует I(B,C,D) = C XOR (B OR NOT D) — асимметричный комбинатор. Эти четыре функции обеспечивают влияние каждого бита входных данных на итоговый дайджест, создавая лавинный эффект, при котором незначительные изменения входных данных вызывают масштабные непредсказуемые изменения результирующего хеша.
MD5: 5eb63bbbe01eeed093cb22bb8f5acdc3
(128 bits = 16 bytes = 32 hex characters)
Алгоритм выполняется в пять этапов: (1) добавление бита 1, затем нулей до тех пор, пока длина сообщения не станет 448 mod 512; (2) добавление исходной длины сообщения в виде 64-битного целого числа в порядке little-endian; (3) инициализация четырёх 32-битных переменных состояния (A, B, C, D) фиксированными константами; (4) обработка каждого 512-битного блока через 64 операции с использованием четырёх нелинейных функций (F, G, H, I), по одной на каждый раунд из 16 операций; (5) добавление результирующего состояния к накопленному итогу и вывод окончательного 128-битного хеша в порядке байтов little-endian.
Примеры кода
Как генерировать MD5-хеши в популярных языках программирования и средах. Обратите внимание: MD5 недоступен в браузерном Web Crypto API — используйте библиотеку или Node.js.
// MD5 is not available in Web Crypto API (it only supports SHA-*)
// Use a library like 'js-md5' or the Node.js crypto module
// Node.js (built-in crypto)
const crypto = require('crypto')
const hash = crypto.createHash('md5').update('hello world').digest('hex')
console.log(hash) // → "5eb63bbbe01eeed093cb22bb8f5acdc3"
// With Unicode input
crypto.createHash('md5').update('cafe\u0301').digest('hex')
// → "4fad076bae205e95bec9dacea498e2ab"import hashlib
# Basic MD5 hash
result = hashlib.md5(b'hello world').hexdigest()
print(result) # → "5eb63bbbe01eeed093cb22bb8f5acdc3"
# Hash a string (must encode to bytes first)
text = 'hello world'
hashlib.md5(text.encode('utf-8')).hexdigest()
# → "5eb63bbbe01eeed093cb22bb8f5acdc3"
# Hash a file
with open('file.bin', 'rb') as f:
md5 = hashlib.md5()
for chunk in iter(lambda: f.read(8192), b''):
md5.update(chunk)
print(md5.hexdigest())package main
import (
"crypto/md5"
"fmt"
)
func main() {
data := []byte("hello world")
hash := md5.Sum(data)
fmt.Printf("%x\n", hash)
// → 5eb63bbbe01eeed093cb22bb8f5acdc3
}# Using md5sum (Linux) or md5 (macOS) echo -n "hello world" | md5sum # → 5eb63bbbe01eeed093cb22bb8f5acdc3 - # macOS echo -n "hello world" | md5 # → 5eb63bbbe01eeed093cb22bb8f5acdc3 # Hash a file md5sum package.json # → a1b2c3d4e5f6... package.json # Using openssl (cross-platform) echo -n "hello world" | openssl md5 # → MD5(stdin)= 5eb63bbbe01eeed093cb22bb8f5acdc3