Безопасность · 3 мин чтения ·
MD5, SHA-1 или SHA-256: какой хеш выбрать?
Контрольным суммам, проверке файлов, паролям и подписям нужно разное. Короткое руководство по выбору хеш-функции и одна ошибка, которой нужно избегать.

Хеш-функция превращает любые данные в короткий отпечаток фиксированной длины. Одинаковые данные всегда дают одинаковый хеш, а изменение одного байта полностью меняет результат. Алгоритмы различаются тем, насколько трудно их обмануть.
"hello" MD5 5d41402abc4b2a76b9719d911017c592
"hello" SHA-256 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
MD5 и SHA-1: взломаны с точки зрения безопасности
Два разных входа с одинаковым хешем MD5 можно получить за секунды, а практические коллизии SHA-1 опубликованы ещё в 2017 году. Не используйте их для подписей, сертификатов и всего, что может подделать злоумышленник. Для быстрых контрольных сумм они по-прежнему годятся — например, чтобы найти дубликаты файлов или построить ключи кеша.
SHA-256: безопасный выбор по умолчанию
Для проверки целостности, проверки загрузок, цифровых подписей и адресации по содержимому стандартный выбор — SHA-256 из семейства SHA-2. SHA-3 и BLAKE2 — современные альтернативы со сравнимым уровнем безопасности.
CRC32: от случайностей, а не от атак
CRC32 и Adler-32 — быстрые контрольные суммы, которые выявляют случайные повреждения при передаче и в архивах. Подобрать совпадающее значение намеренно может кто угодно, поэтому от подделки они не защищают.
Никогда не храните пароли с быстрым хешем
Это самая частая ошибка. Скорость — именно то, что не нужно для паролей: видеокарта перебирает миллиарды хешей SHA-256 в секунду. Используйте медленный алгоритм с солью, созданный для паролей, — Argon2, bcrypt или scrypt — через библиотеку паролей вашего фреймворка.
Хеширование, шифрование и кодирование — разные вещи
Кодирование Base64, hex, URL обратимо для всех, без ключа
Шифрование AES, RSA обратимо только с ключом
Хеширование SHA-256, MD5 в одну сторону, обратить нельзя
Хеш нельзя «расшифровать». Сайты, которые обещают обратить MD5, просто ищут хеш в огромных таблицах известных входных данных. Это срабатывает для распространённых слов и коротких паролей и не срабатывает для всего длинного и случайного.
Проверка скачанного файла
Многие проекты публикуют контрольную сумму SHA-256 рядом с файлами для скачивания. Вычислите хеш полученного файла и сравните два значения; если отличается хотя бы один символ, файл повреждён или это не тот файл, который выпустил автор. В каждой операционной системе есть встроенная команда:
Linux sha256sum file.iso
macOS shasum -a 256 file.iso
Windows certutil -hashfile file.iso SHA256
PowerShell Get-FileHash file.iso -Algorithm SHA256
Длина хешей
MD5 даёт 128 бит (32 шестнадцатеричных символа), SHA-1 — 160 бит (40), SHA-256 — 256 бит (64), SHA-512 — 512 бит (128). Если нужно доказать, кто создал сообщение, а не только то, что оно не менялось, используйте HMAC или цифровую подпись: обычный хеш может пересчитать любой, кто изменил содержимое.
Что выбрать — по одной строке
- Проверка скачанного файла или резервной копии: SHA-256.
- Подписи, сертификаты и всё, что связано с безопасностью: SHA-256 или надёжнее, никогда MD5 или SHA-1.
- Поиск дубликатов файлов или ключи кэша: MD5 или SHA-1 подойдут, и они быстрые.
- Обнаружение ошибок передачи в протоколе или архиве: CRC32.
- Хранение паролей: ни один из них; используйте Argon2, bcrypt или scrypt.
Почему хеши не совпадают
Если два инструмента дают разные хеши для «одного и того же» текста, входные данные почти никогда не совпадают: перевод строки в конце, окончания строк Windows или другая кодировка меняют весь результат. Генератор хешей от 4Dev хеширует текст как байты UTF-8, как md5sum, sha256sum и hashlib в Python, и поддерживает 17 алгоритмов, включая MD5, SHA-1, SHA-2, SHA-3, BLAKE2 и CRC32.