belun.app Блог
EN
· обновлено

MD5, SHA-1, SHA-256, SHA-512: в чём разница и что выбрать

Чем отличаются MD5, SHA-1, SHA-256 и SHA-512: длина хеша, стойкость, применение и как проверить контрольную сумму файла в Windows, Linux и macOS.

Цифровой замок и символы шифрования: кибербезопасность и генерация хеша

Коротко: MD5 и SHA-1 сломаны и годятся только для бытовых контрольных сумм. Для всего остального берите SHA-256. SHA-512 — тот же уровень надёжности с более длинным выводом, он нужен, только если этого требует внешняя система.

АлгоритмДлина хешаСимволов в hexСтатус в 2026Где встречается
MD5128 бит32Сломан (коллизии с 2004 г.)Контрольные суммы файлов, ETag, ключи кеша
SHA-1160 бит40Сломан (SHAttered, 2017 г.)Старые TLS-сертификаты, объекты Git, отпечатки SSH
SHA-256256 бит64Надёжен, стандарт по умолчаниюHTTPS-сертификаты, JWT, Bitcoin, подписи пакетов
SHA-512512 бит128НадёженАрхивные подписи, /etc/shadow в Linux, 64-битные системы

Что выбрать под конкретную задачу

  • Проверить, что скачанный файл не побился — подойдёт любой, включая MD5: вы защищаетесь от помех в канале, а не от злоумышленника.
  • Проверить подлинность дистрибутива с сайта — только SHA-256. Здесь противник есть, и он может подменить файл под тот же MD5.
  • Хранить пароли — ни один из четырёх. Нужны bcrypt, scrypt или Argon2, см. раздел про пароли ниже.
  • Подписать JWT, посчитать HMAC — SHA-256.
  • Сравнить два текста на идентичность, построить ключ кеша — MD5 быстрее, и его достаточно.
  • Подпись, которая должна пережить двадцать лет — SHA-512.

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

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

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

  • Детерминированность. Одни и те же данные всегда дают один и тот же хеш, на любой машине и в любом языке программирования.
  • Лавинный эффект. Изменение одного бита полностью меняет результат — «похожих» хешей у похожих данных не бывает.
  • Необратимость. По хешу нельзя восстановить исходные данные иначе как перебором.

Лавинный эффект проще один раз увидеть. Вот hello и hellp — разница в одну букву:

ВходSHA-256
hello2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
hellpfdd7585e08c4e2afd71dcabdb4636c89d557a3f42db9e2040c8bbd1708aa4ce7

Ни одного общего символа в начале. Именно поэтому хеш работает как индикатор изменений: нельзя «немного» изменить файл так, чтобы хеш изменился «немного».

Полезно запомнить и опорные значения — хеш пустой строки. Если инструмент выдаёт их, значит на вход ничего не пришло:

АлгоритмХеш пустой строки
MD5d41d8cd98f00b204e9800998ecf8427e
SHA-1da39a3ee5e6b4b0d3255bfef95601890afd80709
SHA-256e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Хеширование — это не шифрование

Самая частая путаница. Шифрование обратимо: есть ключ — есть исходный текст. Хеширование необратимо в принципе, ключа нет, и «расшифровать» хеш нельзя.

Сайты, которые обещают «расшифровать MD5», на самом деле ищут значение в базе заранее посчитанных хешей популярных строк — это называется радужной таблицей. password там найдётся мгновенно, случайная строка на двадцать символов — никогда. Если вам нужна именно обратимость, нужен шифр, а не хеш: для этого есть шифрование текста.

Отдельно про кириллицу: она хешируется как байты UTF-8, а не как буквы. Поэтому Привет даёт MD5 8a669e9418750c81ab90ae159a8ec410, и любой корректный инструмент выдаст ровно это значение. Если ваш результат отличается, скорее всего строка была в другой кодировке — например в Windows-1251 — или в конце затесался перевод строки.

MD5 — быстрый, но сломанный

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

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

Где MD5 остаётся уместным: обнаружить случайное повреждение при копировании, построить ключ кеша, быстро сравнить большие файлы на идентичность. Во всех этих задачах противника нет, а MD5 заметно быстрее SHA-2.

SHA-1 — устарел, но всё ещё повсюду

SHA-1 выдаёт 160 бит, 40 символов. В феврале 2017 года Google и CWI опубликовали проект SHAttered — первую практическую коллизию SHA-1: два PDF с разным изображением и одинаковым хешем. В 2020 году появилась атака с выбранным префиксом, которая стоит уже несколько десятков тысяч долларов машинного времени, то есть доступна не только государствам.

Браузеры отвергают TLS-сертификаты на SHA-1 с 2017 года. Но алгоритм никуда не делся: на нём построены идентификаторы объектов Git (переход на SHA-256 идёт медленно и в большинстве репозиториев не завершён), отпечатки хостов в старых конфигурациях SSH, множество внутренних систем. Читать такие хеши приходится, создавать новые — не стоит.

SHA-256 — то, что нужно по умолчанию

SHA-256 входит в семейство SHA-2, опубликованное NIST в 2001 году. Выдаёт 256 бит, 64 символа.

Устроен он так: сообщение дополняется до длины, кратной 512 битам — добавляется бит 1, затем нули, а в последние 64 бита записывается исходная длина, — после чего блоки по 512 бит последовательно прогоняются через функцию сжатия: 64 раунда над восемью 32-битными регистрами. Это конструкция Меркла — Дамгора: каждый блок смешивается с результатом предыдущего, поэтому изменение в начале файла влияет на весь хеш.

Где он применяется:

  • TLS и HTTPS — SHA-256 обязателен для всех действующих сертификатов.
  • JWT — самый распространённый алгоритм подписи, HS256, это HMAC поверх SHA-256; посмотреть содержимое токена можно в декодере JWT.
  • Bitcoin — доказательство работы и связывание блоков.
  • Пакетные менеджеры — apt, npm и pip проверяют целостность пакетов по SHA-256.
  • PBKDF2 — внутри использует HMAC-SHA256.

Практических атак на SHA-256 не существует и в обозримом будущем не предвидится. Если сомневаетесь — берите его.

SHA-512 — длиннее вывод, иногда быстрее

SHA-512 выдаёт 512 бит, 128 символов. Устроен так же, но оперирует 64-битными словами вместо 32-битных и делает 80 раундов вместо 64. Отсюда неочевидное следствие: на 64-битном процессоре SHA-512 обычно быстрее SHA-256 в пересчёте на байт, хотя выдаёт вдвое более длинный хеш.

Запас прочности у него выше, но это разница между «невозможно» и «невозможно»: перебор SHA-256 уже недостижим для любого мыслимого оборудования. Поэтому SHA-512 выбирают по другим причинам — так требует спецификация внешней системы, нужен более длинный вывод для последующего разбиения на ключи, или это хеширование паролей в /etc/shadow Linux (префикс $6$).

Таблица выбора

ЗадачаАлгоритм
Проверка файла, бытоваяMD5 или SHA-256
Проверка файла, критичнаяSHA-256
Хранение паролейbcrypt / scrypt / Argon2
HMAC, подпись JWTSHA-256
TLS, сертификатыSHA-256
Долгосрочные архивные подписиSHA-512
Ключ кеша, дедупликацияMD5

Почему пароли нельзя хешировать через SHA

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

Нужны две вещи, которых у голого SHA нет:

  • Соль — случайная строка, своя для каждого пользователя, которая добавляется к паролю перед хешированием. Она обесценивает радужные таблицы: одинаковые пароли двух пользователей дают разные хеши.
  • Замедление. bcrypt, scrypt и Argon2 намеренно требуют тысяч итераций, а scrypt и Argon2 — ещё и заметного объёма памяти, что бьёт по перебору на видеокартах. Стоимость проверки одного пароля настраивается и повышается по мере роста мощности железа.

Если библиотеки с Argon2 под рукой нет, минимально допустимый вариант — PBKDF2-HMAC-SHA256 с большим числом итераций. Оценить, что вообще стоит защищать, помогает проверка надёжности пароля, а сгенерировать нормальный — генератор паролей.

Как проверить контрольную сумму файла

Дистрибутивы обычно публикуют SHA-256 рядом со ссылкой на скачивание. Посчитать хеш локально можно без сторонних утилит, средствами системы.

Windows, PowerShell:

Get-FileHash .\ubuntu.iso -Algorithm SHA256

Windows, командная строка:

certutil -hashfile ubuntu.iso SHA256

Linux:

sha256sum ubuntu.iso

macOS:

shasum -a 256 ubuntu.iso

Осталось сравнить вывод с опубликованным значением. Регистр букв не важен: A3F и a3f — одно и то же. Сравнивать глазами весь хеш не нужно, достаточно первых и последних шести символов: подделать их одновременно ничуть не проще, чем весь хеш.

Важная оговорка: контрольная сумма подтверждает целостность, но не подлинность. Если и файл, и хеш взяты с одного взломанного зеркала, злоумышленник подменил оба. Настоящую подлинность даёт только GPG-подпись, а хеш защищает от обрыва загрузки и битого диска.

Частые вопросы

Можно ли расшифровать MD5? Нет. MD5 необратим: 128 бит вывода просто не содержат достаточно информации, чтобы восстановить произвольный вход. Сервисы «расшифровки» ищут совпадение в базе заранее посчитанных хешей, и работает это только для коротких и популярных строк.

Чем MD5 отличается от SHA-256? Длиной вывода — 128 бит против 256 — и стойкостью. Для MD5 умеют строить коллизии за секунды, для SHA-256 не умеют. MD5 при этом заметно быстрее.

Какой длины хеш SHA-256? 256 бит, то есть 32 байта, то есть 64 символа в шестнадцатеричной записи. Длина не зависит от размера входных данных: и один символ, и файл на 10 ГБ дают ровно 64 символа.

Что такое коллизия хеша? Два разных входа с одинаковым хешем. Математически коллизии существуют всегда — входов бесконечно много, а выходов конечное число. Вопрос в том, можно ли построить их целенаправленно: для MD5 и SHA-1 можно, для SHA-256 нет.

Почему один и тот же текст даёт разные хеши в разных инструментах? Почти всегда дело в самих данных, а не в алгоритме. Типичные причины: незамеченный перевод строки или пробел в конце, разная кодировка (UTF-8 против Windows-1251), BOM в начале файла. Хеширование детерминировано — при одинаковых байтах результат совпадёт всегда.

Что безопаснее, SHA-256 или SHA-512? Обе безопасны, и на практике разницы нет. У SHA-512 больший теоретический запас, у SHA-256 более широкая поддержка. Если внешняя система не требует конкретного варианта, берите SHA-256.

Подходит ли SHA-256 для паролей? Сам по себе нет: он слишком быстрый и потому уязвим к перебору. Для паролей нужны bcrypt, scrypt или Argon2 либо, как минимум, PBKDF2-HMAC-SHA256 с большим числом итераций и солью.


Генератор хешей считает MD5, SHA-1, SHA-256 и SHA-512 из любого текста в реальном времени, прямо в браузере — данные никуда не отправляются. Рядом могут пригодиться Base64-кодировщик, генератор UUID и конвертер систем счисления.

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

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