Перейти к содержимому
Alex Kovalev

Хеши и контрольные суммы

Убедитесь, что скачанный файл тот самый, который опубликовали. Бросьте его сюда, вставьте их контрольную сумму и посмотрите, совпадает ли.

Работает в вашем браузере. Всё, что вы сюда вставляете или бросаете, никуда не загружается.

Что хешируем
5 байт, UTF-8

Ключ HMAC (необязательно)

Оставьте пустым для обычных хешей. С ключом каждая строка покажет HMAC.

Голый хеш, строка вида e3b0… file.iso или целый файл .sha256.

Совпадает Тот же SHA-256, что вы вставили.

Хеши
Формат
  • MD55d41402abc4b2a76b9719d911017c592✓ совпадает✗ не совпадает
  • SHA-1aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d✓ совпадает✗ не совпадает
  • SHA-2562cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824✓ совпадает✗ не совпадает
  • SHA-38459e1748777448c69de6b800d7a33bbfb9ff1b463e44354c3553bcdb9c666fa90125a3c79f90397bdf5f6a13de828684f✓ совпадает✗ не совпадает
  • SHA-5129b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043✓ совпадает✗ не совпадает

Как пользоваться

4 шага
  1. Перетащите скачанный файл на вкладку Файл или наберите текст на вкладке Текст.
  2. Вставьте контрольную сумму со страницы загрузки в поле Ожидаемая сумма. Подойдёт голый хеш, строка из sha256sum или целый файл .sha256.
  3. Посмотрите на вердикт. Алгоритм определяется по длине вставленного хеша, выбирать ничего не нужно.
  4. Любой хеш копируется кнопкой Копировать: в строчном hex, заглавном HEX или Base64.

Что он делает

1 мин чтения

Инструмент считает MD5, SHA-1, SHA-256, SHA-384 и SHA-512 одновременно. Семейство SHA берётся из встроенного в браузер Web Crypto API (crypto.subtle). MD5 в Web Crypto нет, поэтому это небольшая самописная реализация, которая читает файл кусками по 2 МБ. Результаты сверены с выводом md5 и shasum.

Ограничения, честно: Web Crypto хеширует один целый буфер, так что для SHA файл должен поместиться в память. До 2 ГБ современные браузеры справляются; больше, и останется только MD5. Ещё Web Crypto есть только на защищённых страницах (https или localhost). Для ISO на 6 ГБ лучше терминал: shasum -a 256 file.iso на macOS, sha256sum file.iso на Linux, Get-FileHash file.iso в PowerShell.

Текст кодируется в UTF-8 и хешируется ровно так, как набран. Отсюда большинство «неправильных» хешей: echo hello | sha256sum хеширует hello плюс перевод строки. Используйте printf '%s' hello | sha256sum или отметьте здесь Добавить перевод строки в конце, чтобы совпасть с echo.

Заполните ключ HMAC, и каждая строка покажет HMAC от входных данных с этим ключом (HMAC-SHA-256 и остальные), то есть то, чем подписывают вебхуки. Сам я чаще всего сверяю суммы после переноса бэкапов cPanel между серверами; команды есть в гайде по cPanel из консоли. Тот же SHA-256 сидит и внутри SSL-сертификата: центр сертификации подписывает его хеш. Подробнее в гайде по SSL.

Вопросы

5 вопросов

Почему мой хеш не совпадает с тем, что на сайте?

Потому что захешировано что-то немного другое. С файлами это обычно недокачанная загрузка или сумма для другой версии или архитектуры. С текстом это перевод строки в конце (echo его добавляет), переводы строк Windows или другая кодировка. Один изменённый байт меняет весь хеш, так что «почти такой же» хеш не значит «почти такой же» файл.

MD5 ещё безопасен?

Для проверки на битые загрузки да, для безопасности нет. Случайное повреждение не даст совпадающий MD5. Но подобрать два разных файла с одинаковым MD5 можно на практике с 2004 года, а SHA-1 пал так же в 2017-м. Если сумма должна доказать, что файл никто не подменил, берите SHA-256 и получайте сумму не с того же зеркала, что и файл, а лучше подписанную.

Как проверить SHA-256 в командной строке?

На macOS shasum -a 256 file.iso, на Linux sha256sum file.iso, в Windows PowerShell Get-FileHash file.iso (SHA-256 там по умолчанию). Если издатель выкладывает файл SHA256SUMS, команда sha256sum -c SHA256SUMS проверит все перечисленные в нём файлы.

Можно ли расшифровать хеш MD5 или SHA-256?

Нет. Хеш не зашифрован, это отпечаток: ключа нет, и прокрутить его назад нельзя. Сайты «MD5 decrypt» хранят огромные таблицы хешей частых слов и утёкших паролей и просто ищут в них ваш. Так находится password123, но не случайный файл и не длинная парольная фраза. По той же причине пароли хранят медленными хешами с солью вроде bcrypt или Argon2, а не голым MD5 или SHA-256.

SHA-256 или SHA-512: что выбрать?

Для проверки загрузки берите тот, что указан у издателя; инструмент всё равно считает все сразу. Оба сегодня надёжны. SHA-256 — обычный выбор для контрольных сумм и сертификатов. SHA-512 даёт хеш длиннее и программно на 64-битных машинах часто чуть быстрее. SHA-384 — это укороченный SHA-512 (с другими начальными значениями); встречается в основном в TLS и в атрибутах integrity="sha384-…" у тегов script, куда идёт вариант в Base64.

Ещё инструменты на стене