Генератор хешей
Вычисляйте хеши MD5 и SHA для любого текста и сверяйте их с ожидаемой контрольной суммой.
Что на самом деле делает хеш-функция
Криптографическая хеш-функция принимает вход любого размера и выдаёт строку байтов фиксированной длины — дайджест, или «хеш». Дайте ей одну букву или целый роман: 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 заметно тормозил бы на большом файле. Хеширование текста честно покрывает распространённый случай вместо того, чтобы предлагать работу с файлами, которая подвешивает страницу.