Алгоритмы хеширования объяснены: MD5, SHA-1, SHA-256, SHA-512
Быстрый ответ
MD5 и SHA-1 взломаны и не должны использоваться для целей, чувствительных к безопасности. SHA-256 — текущий default для проверки целостности и подписей. SHA-512 быстрее на 64-bit CPU. Используйте наш Hash Generator для вычисления в браузере.
Введение
Криптографическая hash-функция принимает вход произвольного размера и производит digest фиксированного размера, который детерминирован, быстр в вычислении, необратим, collision-resistant и avalanche-чувствителен (изменение одного бита меняет примерно половину выходных битов). MD5 (128-bit), SHA-1 (160-bit), SHA-256 (256-bit) и SHA-512 (512-bit) — четыре наиболее распространённые hash-функции, но их свойства безопасности различаются кардинально.
Шаг за шагом
-
Понять свойства хеш-функции
Хороший криптографический хеш является детерминированным (один и тот же вход всегда дает один и тот же результат), выход фиксированного размера, быстро вычисляется, невозможно обратить вспять (сопротивление предварительному изображению), невозможно найти два входа с одинаковым выходом (устойчивость к коллизиям) и лавинами (небольшое изменение входных данных переворачивает ~ 50% выходных битов).
-
Знайте размеры дайджеста
MD5 выдаёт 128 бит (32 шестнадцатеричных символа). SHA-1 выдает 160 бит (40 шестнадцатеричных символов). SHA-256 выдаёт 256 бит (64 шестнадцатеричных символа). SHA-512 выдает 512 бит (128 шестнадцатеричных символов). Более длинные дайджесты уменьшают вероятность коллизий, но увеличивают размер хранилища.
-
Узнайте, почему MD5 и SHA-1 не работают.
Исследователи обнаружили практические коллизионные атаки против MD5 (2004 г.) и SHA-1 (2017 г., атака SHAttered). Коллизии позволяют злоумышленнику создать два разных ввода с одним и тем же хешем, взламывая цифровые подписи и центры сертификации. Ни один из них не должен использоваться в целях безопасности.
-
Выберите правильный алгоритм
Для проверки целостности файлов, где скорость важнее безопасности, по-прежнему распространены MD5 или SHA-1. Для любого использования, чувствительного к безопасности (пароли, подписи, сертификаты, блокчейн), используйте SHA-256 или SHA-512. Для хранения паролей используйте медленный KDF, например bcrypt, scrypt или Argon2 — никогда не используйте необработанный SHA-256.
-
Вычисление и проверка хешей
Используйте генератор хэшей для хеширования текста с помощью любого алгоритма или хэш файла для вычисления хеша локального файла. Сравните полученный дайджест с заведомо верным значением, чтобы проверить целостность — разница в один бит означает, что файл был поврежден или подделан.
Примеры
MD5 слова «привет» (128 бит, 32 шестнадцатеричных символа)
Вход: hello
Выход: 5d41402abc4b2a76b9719d911017c592
SHA-256 слова «привет» (256 бит, 64 шестнадцатеричных символа)
Вход: hello
Выход: 2cf24dba5fb0d30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
Эффект лавины — одна смена персонажа
Вход: привет против привета
Выход: SHA-256('hello') запускает 2cf24dba... а SHA-256('Hello') запускает 185f8db3... — совершенно другое, несмотря на однобитовое изменение входных данных
Распространенные проблемы
- Использование MD5 или SHA-1 для хеширования паролей: оба являются быстрыми и ненадежными, что делает атаки методом перебора и радужной таблицы тривиальными. Вместо этого используйте bcrypt, scrypt или Argon2.
- Путаница хеширования с шифрованием: хеширование является односторонним и необратимым; шифрование двустороннее. Вы не можете «расшифровать» хеш — вы можете только сравнивать хеши.
- Игнорирование атак с расширением длины: MD5, SHA-1, SHA-256 и SHA-512 уязвимы для атак с расширением длины при использовании в качестве MAC. Используйте HMAC-SHA256 для аутентификации сообщений.
- Сравнение хешей с помощью == вместо сравнения с постоянным временем: утечки времени позволяют злоумышленникам восстанавливать хэши побайтно. Используйте сравнение в постоянное время в коде безопасности.
Советы
- Для новых систем по умолчанию используется SHA-256 — он быстрый, широко поддерживается и по состоянию на 2026 год не имеет практической коллизионной атаки.
- Для хранения паролей используйте bcrypt с рабочим коэффициентом 12+ (или Argon2id с памятью 64 МБ) — никогда не используйте необработанный SHA-256, который слишком быстр по сравнению с графическими процессорами.
- При проверке загрузки файла сравните имя алгоритма и дайджест — хэш SHA-1 не имеет смысла, если издатель намеревался только SHA-256.
- Используйте наш инструмент File Hash для локального вычисления SHA-256 больших файлов без загрузки — он передает файл через Web Crypto API.