belun.app Блог EN

Хеш-функции: MD5, SHA-1, SHA-256 и SHA-512 — в чём разница

Практическое руководство по криптографическим хеш-функциям: что это, когда применять каждую и почему MD5 и SHA-1 уже небезопасны для критичных задач.

Digital lock and encryption symbols representing cybersecurity and hashing

Если вы проверяли скачанный файл по SHA-256-контрольной сумме, хранили пароли в базе данных или задавались вопросом, что такое идентификатор коммита Git — вы уже работали с хеш-функциями. Вот как они устроены и какую выбрать.

Что такое хеш-функция?

Криптографическая хеш-функция принимает любые входные данные — один символ, абзац текста или гигабайтный файл — и возвращает строку фиксированной длины, называемую дайджестом. Два свойства делают хеши полезными:

  • Детерминированность: одни и те же данные всегда дают одинаковый хеш.
  • Лавинный эффект: изменение даже одного символа полностью меняет результат. Хеш «hello» совсем не похож на хеш «hellp».

Хеши необратимы: по хешу нельзя восстановить исходные данные без перебора. Именно это делает их безопасными для хранения паролей — база хранит хеш, а не открытый текст.

MD5 — быстрый, но ненадёжный

MD5 производит 128-битный (32 шестнадцатеричных символа) хеш. В 1990-х он был стандартом, но сегодня считается криптографически сломанным.

Исследователи продемонстрировали атаки на коллизии — создание двух разных входных данных с одинаковым MD5-хешем. Это делает MD5 непригодным для хранения паролей, цифровых подписей и отпечатков сертификатов.

Для некритических контрольных сумм MD5 по-прежнему подходит. Если нужно просто убедиться, что файл не испортился при скачивании и злоумышленника в цепочке нет — MD5 вполне работоспособен и быстр.

SHA-1 — устарел, но встречается

SHA-1 производит 160-битный (40 символов) хеш. В 2017 году проект Google SHAttered продемонстрировал практические коллизионные атаки на него.

SHA-1 устарел для новых систем. Он всё ещё встречается в устаревших TLS-сертификатах (современные браузеры их отклоняют), в исходном формате объектов Git (Git перешёл на SHA-256 в новых форматах репозиториев) и в старых SSH-отпечатках хостов. В новом коде для задач безопасности его лучше не использовать.

SHA-256 — современный стандарт

SHA-256 входит в семейство SHA-2 и производит 256-битный (64 символа) хеш. Это основа современной криптографии:

  • HTTPS-сертификаты: SHA-256 обязателен для всех действующих TLS-сертификатов.
  • JWT-подписи: наиболее распространённый алгоритм — HMAC-SHA256.
  • Хранение паролей: PBKDF2 внутри использует HMAC-SHA256.
  • Блокчейн: Bitcoin применяет SHA-256 для доказательства работы и связи блоков.
  • Git: новые репозитории используют SHA-256 для идентификаторов объектов.

Практических атак на SHA-256 не существует. Используйте его по умолчанию.

SHA-512 — больший вывод, чуть быстрее на 64-битных системах

SHA-512 производит 512-битный (128 символов) хеш. Теоретический запас безопасности у него выше, чем у SHA-256, — хотя SHA-256 и так недосягаем для любого перебора. Интереснее другое: SHA-512 работает с 64-битными словами, тогда как SHA-256 — с 32-битными, поэтому на современных 64-битных процессорах SHA-512 может быть быстрее в пересчёте на байт.

Используйте SHA-512, если этого требует интегрируемая система или нужен дополнительный запас надёжности на перспективу. Для большинства задач SHA-256 — более широко поддерживаемый выбор.

Как выбрать алгоритм

ЗадачаРекомендуемый алгоритм
Проверка файла (бытовая)MD5 или SHA-256
Проверка файла (критичная)SHA-256
Хранение паролейbcrypt / Argon2 (не голый SHA)
HMAC / JWTSHA-256
TLS / сертификатыSHA-256
Долгосрочные архивные подписиSHA-512

Про пароли отдельно: голый SHA — даже SHA-512 — для паролей не подходит, потому что хеш вычисляется слишком быстро и перебор становится реальным. Используйте bcrypt, scrypt или Argon2.


Генератор хешей вычисляет все четыре хеша из любого текста в реальном времени прямо в браузере. Вставьте строку, сравните с известным значением или просто посмотрите, что получается с разными входными данными — без регистрации.

Попробуйте инструмент

Генератор хешей →