Сравнение хеш-функций: MD5, SHA-1, SHA-256, SHA-512
Сравнение хеш-алгоритмов: скорость, безопасность, размер, когда использовать каждый.
Введение
Когда в проекте нужно хешировать данные, разработчик часто оказывается перед выбором: MD5, SHA-1, SHA-256 или SHA-512? Ответ не очевиден — разные алгоритмы оптимизированы под разные задачи. Где-то важна скорость, где-то — стойкость к коллизиям, где-то — компактность. В этой статье сравним популярные хеш-функции по ключевым параметрам и поможем выбрать подходящую для каждого сценария. Попробовать любой из алгоритмов можно в наших генераторах:MD5,SHA-256 иSHA-512.
Что такое хеш-функция
Хеш-функция — это алгоритм, который принимает входные данные произвольной длины и возвращает строку фиксированной длины. У хорошей криптографической хеш-функции четыре ключевых свойства:
- Детерминированность: одинаковые входы дают одинаковый хеш.
- Лавинный эффект: изменение одного бита полностью меняет выход.
- Однонаправленность: по хешу нельзя восстановить вход.
- Стойкость к коллизиям: сложно найти два разных входа с одинаковым хешем.
Краткое сравнение
| Алгоритм | Год | Размер выхода | Длина блока | Раундов | Статус |
|---|---|---|---|---|---|
| MD5 | 1992 | 128 бит | 512 бит | 64 | Сломан |
| SHA-1 | 1995 | 160 бит | 512 бит | 80 | Сломан |
| SHA-256 | 2001 | 256 бит | 512 бит | 64 | Активен |
| SHA-512 | 2001 | 512 бит | 1024 бит | 80 | Активен |
| SHA3-256 | 2015 | 256 бит | 1088 бит | 24 | Активен |
MD5
MD5 — старейший из рассматриваемых алгоритмов, разработанный Рональдом Ривестом в 1991–1992 годах. Выдаёт 128-битный хеш, что в HEX-представлении даёт 32 символа. Алгоритм исторически применялся для проверки целостности файлов, хранения паролей и цифровой подписи.
С 2004 года MD5 считается криптографически сломленным: китайский исследователь Сяоюнь Ван показал способ находить коллизии за секунды. После этого CA-центры перестали использовать MD5 для подписи сертификатов, а хранение паролей в MD5 стало считаться недопустимым.
Где MD5 ещё уместен: проверка случайного повреждения файлов (когда атакующий не пытается подделать хеш), ETag в HTTP, кэш-ключи. Подробности — в статье проMD5.
SHA-1
SHA-1 был разработан NSA и опубликован в 1995 году. Выдаёт 160-битный хеш (40 HEX-символов). Долгое время был стандартом для SSL-сертификатов и Git.
В 2017 году Google и CWI Institute опубликовали коллизию SHA-1 (проект SHAttered). После этого все основные браузеры перестали доверять SHA-1-сертификатам. Git постепенно мигрирует на SHA-256, хотя полная миграция займёт годы.
Где SHA-1 ещё встречается: Git (исторически), Bitcoin-адреса (в связке с RIPEMD-160), старые DSA-подписи. В новых проектах использовать не следует.
SHA-256
SHA-256 — часть семейства SHA-2, разработанного NSA и опубликованного в 2001 году. Выдаёт 256-битный хеш (64 HEX-символа). Сегодня это самый популярный криптографический алгоритм в мире.
Где применяется:
- TLS-сертификаты (почти все современные HTTPS-сайты).
- Блокчейн Bitcoin.
- Цифровые подписи PDF, PAdES, CMS.
- Контрольные суммы дистрибутивов Linux.
- HMAC-SHA256 для подписи API и JWT.
- PBKDF2-HMAC-SHA256 (для паролей, хотя bcrypt лучше).
Практических коллизий не найдено, квантовая угроза (алгоритм Гровера) снижает трудоёмкость с 2²⁵⁶ до 2¹²⁸ — это всё ещё за пределами возможностей обозримого будущего. Подробнее — в статье проSHA-256.
SHA-512
SHA-512 — старший брат SHA-256 из того же семейства SHA-2. Выдаёт 512-битный хеш (128 HEX-символов). Работает с 64-битными словами и блоками по 1024 бит.
На 64-битных процессорах SHA-512 часто работает быстрее SHA-256 за счёт работы с 64-битными инструкциями. Однако для большинства прикладных задач разница в безопасности между 256 и 512 битами несущественна — обе функции одинаково недоступны для взлома.
Где применять SHA-512:
- Длинные хеши для криптовалюты (некоторые альткоины).
- HMAC-SHA512 для API с высокими требованиями к безопасности.
- Хеширование больших файлов на 64-битных серверах.
- Цифровые подписи с повышенным запасом прочности.
Сравнение скорости
На современном железе (Apple M2, Single Core) скорость вычисления хешей для небольших сообщений выглядит примерно так:
| Алгоритм | CPU (однопоток) | GPU RTX 4090 |
|---|---|---|
| MD5 | ~600 МБ/с | ~50 млрд хешей/с |
| SHA-1 | ~500 МБ/с | ~25 млрд хешей/с |
| SHA-256 | ~250 МБ/с | ~15 млрд хешей/с |
| SHA-512 | ~350 МБ/с (64-bit) | ~5 млрд хешей/с |
| SHA3-256 | ~150 МБ/с | ~3 млрд хешей/с |
Цифры ориентировочные и зависят от реализации, но общая тенденция ясна: MD5 быстрее всех, SHA-512 на 64-битной архитектуре обгоняет SHA-256, SHA-3 — самый медленный.
Что выбрать для конкретной задачи
Проверка целостности файла
Если защита от целенаправленной подделки не нужна (например, проверка случайного повреждения при скачивании) — достаточно MD5. Если атакующий мог заменить файл — SHA-256 или SHA-512.
Хранение паролей
Ни один из перечисленных алгоритмов напрямую не подходит — все они слишком быстрые. Используйте bcrypt, scrypt или argon2id. Если очень нужен PBKDF2 — берите PBKDF2-HMAC-SHA256 с 600 000 итераций (рекомендация OWASP 2023).
Цифровые подписи и сертификаты
SHA-256 или SHA-512. SHA-1 и MD5 не использовать — современные браузеры и валидаторы отклонят подпись.
Подпись API-запросов (HMAC)
HMAC-SHA256 — оптимальный выбор. HMAC-SHA512 — если хотите запас на будущее. Подробнее — в статье про HMAC.
Кэш-ключи и дедупликация
Если коллизии не критичны — MD5 (32 байта, быстро). Если важна надёжность — SHA-256. Если место критично — рассмотрите xxHash или MurmurHash (некриптографические, но быстрее).
Git-подобные структуры данных
SHA-256 — современный стандарт. Git с 2020 года поддерживает SHA-256 как альтернативу SHA-1.
Дайджест-сравнение по свойствам
| Сценарий | MD5 | SHA-1 | SHA-256 | SHA-512 |
|---|---|---|---|---|
| Пароли | ✗ | ✗ | ✗ | ✗ |
| Цифровая подпись | ✗ | ✗ | ✓ | ✓ |
| Контрольная сумма | △ | △ | ✓ | ✓ |
| HMAC | ✗ | △ | ✓ | ✓ |
| Кэш-ключи | ✓ | ✓ | ✓ | △ (длинный) |
| Сертификаты | ✗ | ✗ | ✓ | ✓ |
Пример: вычисление всех хешей сразу
const crypto = require('crypto');
const data = 'Hello, ConvertHub!';
const algorithms = ['md5', 'sha1', 'sha256', 'sha512'];
const hashes = {};
for (const algo of algorithms) {
hashes[algo] = crypto.createHash(algo).update(data).digest('hex');
}
console.log(hashes);
// {
// md5: "1a79a4d60de6718e8e5b326e338ae533",
// sha1: "85f7d1f...", // 40 символов
// sha256: "33f7d2f...", // 64 символа
// sha512: "9d74e85..." // 128 символов
// }Что дальше: SHA-3 и BLAKE3
Семейство SHA-3 (Keccak) — победитель конкурса NIST 2012 года. Внутреннее устройство принципиально отличается от SHA-1/2: sponge-конструкция вместо Меркле-Дамгард. SHA-3 не имеет известных уязвимостей и считается стойким даже в сценариях, где SHA-2 может ослабнуть.
BLAKE3 — современный алгоритм 2020 года, в разы быстрее SHA-2 и SHA-3 на современном железе за счёт параллелизма. Подходит для проверки целостности больших файлов, но для криптографических подписей пока менее распространён.
Если вы проектируете новую систему с расчётом на десятилетие вперёд — стоит рассмотреть SHA-3 или BLAKE3 как более «будущестойкие» альтернативы.
Заключение
MD5 и SHA-1 — исторические алгоритмы, которые сегодня можно использовать только для неответственных задач. SHA-256 и SHA-512 — рабочий стандарт криптографии 2025 года, подходящий для подписи сертификатов, проверки целостности и HMAC-подписей. Для хранения паролей, впрочем, ни одна из этих функций не годится — там нужны медленные алгоритмы вроде bcrypt или argon2. Выбирайте хеш под задачу, а не «по умолчанию». Сгенерировать хеш любого из перечисленных алгоритмов можно в наших генераторах: MD5,SHA-256 иSHA-512.
Попробуйте эти инструменты
Похожие статьи
Как создать надёжный пароль: генератор паролей
Правила создания паролей, длина, символы, энтропия, менеджеры паролей, двухфакторная аутентификация.
MD5 хеш: что это и безопасно ли использовать
Алгоритм MD5, хеширование, коллизии, почему MD5 не для паролей, где ещё можно использовать.
SHA-256: безопасное хеширование
Алгоритм SHA-256, применение в блокчейне, SSL, цифровые подписи, сравнение с MD5 и SHA-1.
UUID: генерация уникальных идентификаторов
UUID версии 1-5, GUID, использование в базах данных, распределённых системах, генерация.