Определение простыми словами
MD5 — это математическая функция, которая берёт любые данные (строку, файл, поток) и возвращает 32-символьную шестнадцатеричную строку. Один и тот же вход всегда даёт один и тот же выход, а малейшее изменение входа полностью меняет результат. Свойство называется лавинным эффектом и делает хеш удобным инструментом для проверки целостности.
Алгоритм описан Рональдом Ривестом в RFC 1321 в 1992 году как замена MD4. Долгое время MD5 был отраслевым стандартом для контрольных сумм скачанных файлов, цифровых подписей и хеширования паролей. Скорость работы и простота сделали его повсеместным: даже сейчас MD5 встречается в API многих сервисов и в формате торрент-файлов.
Проблема в коллизиях: разные входы могут давать одинаковый хеш. С 2004 года известны атаки, позволяющие сгенерировать два разных файла с совпадающим MD5 за часы, а сейчас — за минуты. Это означает, что MD5 нельзя использовать там, где важна криптографическая стойкость: для подписей, паролей, токенов аутентификации. Современные альтернативы — SHA-256, SHA-3 и Argon2 для паролей. Подробнее в статьях о SHA-256 и AES.
Сравнение
| Параметр | MD5 | SHA-1 | SHA-256 |
|---|---|---|---|
| Длина хеша | 128 бит | 160 бит | 256 бит |
| Год публикации | 1991 | 1995 | 2001 |
| Криптографически стойкий | нет | нет | да |
| Скорость на CPU | очень высокая | высокая | средняя |
| Подходит для паролей | нет | нет | с солью и итерациями |
| Подходит для контрольных сумм файлов | да (от случайных ошибок) | да | да |
Кейсы использования
- Контрольная сумма скачанного ISO-образа: проверка от случайной порчи на канале.
- Дедупликация файлов в облачных хранилищах: одинаковый MD5 — кандидат на сравнение байтов.
- Идентификаторы фрагментов в торрентах и системах CDN.
- Кеш-ключи в Redis или Memcached, когда нужен короткий и стабильный идентификатор.
- Хеширование email-адресов для Gravatar — публичного сервиса аватаров.
Когда MD5 опасен:
- Хеширование паролей пользователей — мгновенно ломается через rainbow tables и брутфорс на GPU.
- Цифровые подписи документов и сертификатов — возможна подделка.
- Проверка целостности от злонамеренной подмены — атакующий подберёт коллизию.
- Любые токены аутентификации, ключи API, JWT-подписи.
Технические детали
Генерация MD5 в разных средах:
# Linux/macOS: контрольная сумма файла
md5sum ubuntu-24.04.iso
# или на macOS
md5 -r ubuntu-24.04.iso
# Хеш строки
echo -n "hello world" | md5sum
# Вывод: 5eb63bbbe01eeed093cb22bb8f5acdc3
# Проверка по файлу с эталонными суммами
md5sum -c SHA256SUMS.md5
# Поиск дубликатов файлов в каталоге
find /data -type f -exec md5sum {} ; | sort | uniq -d -w 32
# Python: md5 от байтовой строки
# import hashlib
# hashlib.md5(b"data").hexdigest()
# PHP: md5 от строки или файла
# md5("data"); md5_file("path/to/file");
Если стоит задача защитить пароли пользователей на VPS-сервере, не используйте MD5: применяйте Argon2id или bcrypt из стандартных библиотек.
🔥 Где это применяется
Частые вопросы
Можно ли расшифровать MD5?
Нет, это односторонняя функция. Но короткие и популярные пароли восстанавливаются через rainbow tables и онлайн-базы за секунды. Поэтому для паролей MD5 непригоден.
Почему MD5 всё ещё используют?
Скорость и обратная совместимость. Для контрольных сумм файлов от случайной порчи MD5 достаточно: его легко сравнить и быстро посчитать. Для безопасности — нет.
Что такое коллизия MD5?
Это два разных входных файла, дающих одинаковый хеш. С 2008 года генерируются за минуты на обычном железе, что делает алгоритм непригодным для подписей.
Чем заменить MD5 для паролей?
Argon2id (победитель Password Hashing Competition 2015), bcrypt или scrypt с правильным cost-параметром. Все три устойчивы к атакам на GPU и ASIC.