Генератор хешей и проверка контрольных сумм

Введите текст или выберите файл, чтобы получить его хеши SHA-256, SHA-512, SHA-384, SHA-1 и MD5. Вставьте контрольную сумму со страницы загрузки, и инструмент скажет, совпадает ли с ней файл.

Хешировать
Хешируется как UTF-8, в точности как введено. Перевод строки в конце меняет хеш: echo его добавляет, а printf и echo -n — нет.
Показывать как

Введите текст или выберите файл, чтобы увидеть его хеши.

Та же проверка в командной строке

shell
# Linux
sha256sum file.iso
# macOS
shasum -a 256 file.iso
# Windows (PowerShell)
Get-FileHash 'file.iso' -Algorithm SHA256

Проверяете ISO перед установкой на сервер? Сравнивайте серверы по тому, сколько они стоят в месяц. Сейчас от 3,02 € в месяц, на выбор: 2 243 сервера.

Работает в вашем браузере: ничего из введённого не отправляется на сервер.

Как это работает

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

Страница использует встроенный в браузер Web Crypto API для SHA-1, SHA-256, SHA-384 и SHA-512 и собственную небольшую реализацию MD5, потому что в браузерах MD5 нет. Текст хешируется как байты UTF-8. Файл читается в память и хешируется там; ничего не загружается. Web Crypto нужен весь файл сразу, поэтому практический предел — несколько сотен мегабайт, в зависимости от устройства.

Поле контрольной суммы принимает просто хеш в верхнем или нижнем регистре, группы, разделённые пробелами или двоеточиями, строку из вывода sha256sum, строку в стиле BSD вроде SHA256 (file.iso) = … или Base64. Инструмент находит в ней хеш и сравнивает его со всеми пятью результатами.

Пример

Текст «abc» (3 байта, без перевода строки) имеет хеш SHA-256 ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad и хеш MD5 900150983cd24fb0d6963f7d28e17f72 — это тестовые значения из FIPS 180-2 и RFC 1321. Пустой ввод даёт SHA-256 e3b0c442…b855: если вы видите его для файла, файл пуст.

Вопросы

Для чего используется SHA-256?

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

Безопасно ли использовать MD5?

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

Как проверить ISO-файл?

Скачайте ISO и контрольную сумму, которую публикует проект, лучше с его собственного сайта по HTTPS. Выберите файл здесь и вставьте контрольную сумму в поле: зелёное совпадение означает, что ваша копия идентична. На сервере выполните sha256sum для файла и сравните либо используйте sha256sum -c с файлом SHA256SUMS. Если проект подписывает и файл с контрольными суммами, подпись можно проверить с помощью gpg.

Можно ли по хешу восстановить исходный текст?

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

Почему мой хеш отличается от хеша в командной строке?

Обычно из-за перевода строки. echo "text" | sha256sum хеширует текст вместе с символом новой строки; чтобы его не было, используйте echo -n или printf. Окончания строк Windows (CR LF) и метка порядка байтов в начале файла тоже меняют результат. Для файлов хеш всегда считается по точным байтам, поэтому совпадение здесь и в sha256sum означает, что это один и тот же файл.