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

Вычисляйте хеши MD5 и SHA для любого текста и сверяйте их с ожидаемой контрольной суммой.

Ввод
MD5Взломан
SHA-1Взломан
SHA-256
SHA-384
SHA-512

Что на самом деле делает хеш-функция

Криптографическая хеш-функция принимает вход любого размера и выдаёт строку байтов фиксированной длины — дайджест, или «хеш». Дайте ей одну букву или целый роман: MD5 всегда вернёт 16 байт, а SHA-256 — всегда 32. Один и тот же вход всегда даёт один и тот же дайджест, а изменение одного бита в любом месте входа меняет примерно половину битов выхода — поэтому у двух почти одинаковых файлов хеши совершенно не связаны между собой.

Ключевое свойство в том, что функция работает только в одну сторону. Вычислить хеш файла быстро; восстановить файл из хеша не просто медленно, а невозможно в принципе, потому что выход фиксированной длины не может закодировать неограниченный вход. Хеш — это отпечаток, а не зашифрованная копия: расшифровывать там нечего.

Для чего хеши используют на самом деле

  • Проверка загрузок: проект публикует SHA-256 выпуска, вы хешируете полученный файл, и совпадение дайджестов означает, что байты дошли в целости.
  • Обнаружение изменений: системы контроля версий, резервного копирования и дедупликации сравнивают хеши, а не файлы целиком, потому что сравнить 32 байта намного дешевле, чем гигабайты.
  • Subresource Integrity: страница закрепляет Base64-хеш скрипта, который загружает с CDN, и браузер отказывается его выполнять при несовпадении.
  • Хранение паролей — но специально созданной медленной функцией, а не обычным хешем. См. ниже.

Обратите внимание на общее: хеш — компактный заместитель чего-то большего, служащий ответом на вопрос «это то же самое, чего я ожидал?» без передачи и хранения самого объекта.

MD5 и SHA-1 взломаны — что это значит на практике

Хеш-функция считается взломанной, как только становится возможным построить коллизию: два разных входа с одинаковым дайджестом. Коллизии MD5 вычисляются на обычном оборудовании с 2004 года, а в 2017-м атака SHAttered дала два разных PDF-файла с одинаковым хешем SHA-1. Именно поэтому оба алгоритма помечены в этом инструменте.

Практическое следствие уже, чем «никогда их не используйте». Коллизия означает, что злоумышленник, контролирующий оба файла, может подогнать вредоносный файл под дайджест безобидного, — то есть MD5 и SHA-1 больше не доказывают, что файл не был подменён враждебной стороной. Для выявления случайных повреждений — оборванной загрузки, перевернувшегося бита на диске — они по-прежнему вполне годятся, и вы будете встречать их в унаследованных системах, заголовках ETag и старых манифестах пакетов, которые никто не станет переписывать.

Правило простое: если вопрос «повредилось ли это при передаче?», MD5 достаточно. Если вопрос «не подменил ли это кто-то нарочно?», берите SHA-256 или сильнее.

Никогда не храните пароль с их помощью

MD5, SHA-1 и даже SHA-256 создавались быстрыми, а быстрота — ровно то свойство, которое не нужно при хранении паролей. Современный GPU считает миллиарды хешей SHA-256 в секунду, поэтому украденную базу просто захешированных паролей можно атаковать в колоссальных масштабах — а поскольку один и тот же пароль всегда даёт один и тот же дайджест, заранее посчитанные таблицы удешевляют это ещё сильнее.

Для хранения паролей нужна намеренно медленная функция с солью и высокими требованиями к памяти: Argon2id, scrypt или bcrypt. Они добавляют уникальную случайную соль к каждому паролю, так что одинаковые пароли не разделяют дайджест, и их стоимость настраивается, так что каждая попытка перебора стоит атакующему реального времени и памяти. Этот инструмент — для контрольных сумм и отпечатков, а не для хеширования паролей.

Как читать и сравнивать дайджесты

Один и тот же дайджест можно записать по-разному. Шестнадцатеричная запись строчными буквами — то, что печатают стандартные консольные утилиты, и обычно именно с ней вы будете сверяться:

md5sum file.iso                  # Linux
sha256sum file.iso               # Linux
shasum -a 256 file.iso           # macOS
Get-FileHash file.iso -Algorithm SHA256   # PowerShell (печатает прописными)
certutil -hashfile file.iso SHA256        # Windows (печатает прописными)

В шестнадцатеричной записи регистр не несёт никакого смысла: PowerShell и certutil печатают прописными, утилиты Unix — строчными, и это ровно одно и то же значение. Поэтому поле сверки здесь игнорирует регистр для hex. С Base64 иначе: это более плотная кодировка тех же байтов, применяемая в Subresource Integrity и ряде API, и там регистр значим — поэтому сравнение выполняется точно.

И последняя привычка, которую стоит завести: никогда не сверяйте два длинных дайджеста глазами. Человеческий глаз прекрасно видит то, что ожидает увидеть, а совпадение первых и последних символов не значит ничего. Вставьте ожидаемое значение и дайте сравнению быть точным.

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

Отправляется ли мой текст на сервер?
Нет. Каждый дайджест вычисляется в вашем браузере — семейство SHA через Web Crypto API, а MD5 через JavaScript, работающий на вашей же машине. Ничто из набранного не покидает устройство.
Можно ли обратить хеш и получить исходный текст?
Нет. Хеш — это отпечаток фиксированной длины, а не зашифрованная копия, и исходник из него не восстанавливается. Сайты, рекламирующие «расшифровку MD5», просто ищут ваш хеш в таблице заранее посчитанных распространённых входов, что работает лишь для короткого или предсказуемого текста.
Почему MD5 и SHA-1 помечены здесь предупреждением?
Потому что коллизии практически достижимы для обоих: можно построить два разных входа с общим дайджестом. Это делает их непригодными для доказательства того, что файл не был подменён намеренно, хотя для выявления случайных повреждений они по-прежнему годятся.
Какой алгоритм выбрать?
SHA-256 — разумный выбор по умолчанию и то, что сегодня публикует большинство проектов. SHA-512 не заметно надёжнее для этой задачи, но быстрее на 64-битном оборудовании. Используйте MD5 или SHA-1 только тогда, когда их уже требует что-то вне вашего контроля.
Можно ли захешировать здесь пароль?
Можно, но хранить результат не следует. Для хранения паролей нужна медленная функция с солью — Argon2id, scrypt или bcrypt: быстрые хеши вроде этих как раз и делают украденные базы паролей лёгкой добычей.
Почему хеши меняются, если добавить пробел или перевод строки?
Потому что пробельные символы — часть входа. Завершающий перевод строки — самая частая причина того, что хеш не совпал с ожидаемым: текст, скопированный из терминала или редактора, нередко тянет его за собой незаметно.
Правильно ли обрабатываются иврит, арабский и эмодзи?
Да. Перед хешированием текст кодируется в байты UTF-8 — это тот же стандарт, который используют все остальные утилиты, поэтому хеш «שלום» или эмодзи здесь совпадёт с результатом md5sum или sha256sum для UTF-8-файла с теми же символами.
Почему он хеширует текст, но не файлы?
В Web Crypto нет потокового API для дайджеста, поэтому файл пришлось бы целиком считывать в память, а написанный вручную MD5 заметно тормозил бы на большом файле. Хеширование текста честно покрывает распространённый случай вместо того, чтобы предлагать работу с файлами, которая подвешивает страницу.