/tool/hash-generator/ работает считает браузер
Бросьте файлы на панель — хеши посчитаются на вашем устройстве, сколько бы файл ни весил. Сверка принимает и одну сумму, и целый файл вида SHA256SUMS: инструмент сам разложит его по именам и скажет, что сошлось, а что нет.
Вставьте текст или бросьте файлы прямо на панель — можно несколько разом и можно папку. Хеши считаются на лету, кнопки «посчитать» нет.
Отметьте нужные алгоритмы. По умолчанию считаются MD5, SHA-1, SHA-256 и SHA-512; CRC32, SHA-384 и SHA-3 включаются отметкой. Отмеченное считается за один проход по файлу, но время складывается — на образе в несколько гигабайт лишнее лучше снять.
Чтобы проверить скачанный файл, вставьте сумму из описания релиза в поле сверки. Алгоритм угадывать не нужно: по длине строки инструмент сам поймёт, какой это хеш, и сам отметит его, если он был снят.
Проверяете набор файлов — вставьте туда же весь файл сумм целиком, как он лежит рядом с релизом. Каждой строке найдётся свой файл, и в таблице появится «совпало» или «не совпало», а лишние и недостающие имена будут названы отдельно.
Чтобы понять, одинаковы ли два файла, бросьте оба сразу: одинаковые находятся сами, и в вердикте появится «совпадают побайтово». Сверять строки глазами не нужно.
Результат забирается файлом: «Файл сумм» даёт готовый список для проверки командой sha256sum -c, CSV открывается в таблице, JSON годится для отчёта.
Исходные данные — те же, что стоят в полях по умолчанию: их можно пересчитать в уме и убедиться, что инструмент не врёт.
MD5 даёт 128 бит, это 32 шестнадцатеричных знака.
SHA-1 — 160 бит, 40 знаков. SHA-256 — 256 бит, 64 знака. SHA-512 — 512 бит, 128 знаков.
В base64 те же байты записываются короче: у SHA-256 выходит 44 знака вместо 64. Значение то же самое, запись другая.
Длина хеша не зависит от длины входа: от одной буквы и от гигабайтного файла SHA-256 всё равно даст 64 знака.
MD5 = 6c3cce14acf8585a366c78f9635ae08d, SHA-1 = 10c0e331cf698ea4812bc4a0fcea2f881e7e1e51, SHA-256 = 27f9c2821159f9b702b9f2341cbd1d6815f32ea86cbec17ea98a65d809d1e00f, он же в виде строки для атрибута integrity — sha256-J/nCghFZ+bcCufI0HL0daBXzLqhsvsF+qYpl2AnR4A8=.
Предела нет. Файл не загружается в память целиком: браузер отрезает от него куски по 4 МБ и скармливает их подсчёту по очереди, а посчитанный кусок сразу забывается. В памяти в любой момент лежат те самые 4 МБ и состояние алгоритма — несколько десятков байт. Образ дистрибутива на четыре гигабайта считается ровно так же, как текстовый файл, только дольше. Полоса хода показывает, сколько осталось, и работу можно прервать кнопкой.
Нет: подсчёт идёт в отдельном потоке (Web Worker), а не в том, который рисует страницу. Полями можно пользоваться, страница прокручивается, кнопка «Отменить» отвечает сразу. Если браузер по какой-то причине не даёт завести отдельный поток, инструмент считает в главном, но всё равно кусками, с паузами между ними.
У SHA-3 внутри другая конструкция — «губка» Keccak, где состояние в 1600 бит перемешивается двадцатью четырьмя раундами. В JavaScript 64-битных целых нет, каждое слово приходится держать двумя половинами по 32 бита, и на этом теряется скорость. Порядок такой: CRC32 и MD5 — сотни мегабайт в секунду, SHA-256 — около полутора сотен, SHA-3 — десятки. Если сверяете большой образ по одной опубликованной сумме, отметьте только её алгоритм.
HMAC — хеш с секретным ключом. Обычный хеш может посчитать кто угодно, поэтому он доказывает только целостность: файл не побился. HMAC доказывает ещё и авторство — совпасть он может лишь у того, кто знает ключ. Им подписывают вебхуки и запросы к платёжным шлюзам: сервис присылает подпись в заголовке, вы считаете HMAC от тела запроса своим ключом и сравниваете. Ключ здесь можно задать строкой, шестнадцатеричной записью или в base64 — платёжные системы выдают его по-разному.
Это Subresource Integrity — значение атрибута integrity у тегов script и link. Браузер сам посчитает хеш подключаемого файла и откажется его выполнять, если значение не сошлось. Так чужая библиотека с внешнего адреса не подменится незаметно. Формат жёсткий: имя алгоритма, дефис и base64 — поэтому строка показывается отдельно и не меняется вместе с переключателем вида.
Потому что качает его ваш же браузер, а он не даёт странице читать содержимое с чужого адреса без разрешения владельца — это правило называется CORS. Если сервер не прислал заголовок Access-Control-Allow-Origin, ответ до страницы не доходит, и посчитать нечего. Помогает одно: скачать файл и бросить его в поле выше. Зато при таком устройстве файл не проходит через наш сервер и на диск не пишется.
По двум причинам сразу. Первая: для MD5 умеют строить коллизии — два разных набора данных с одинаковым хешем, — поэтому как подпись он не годится. Вторая, более важная для паролей: MD5 очень быстрый. Хорошая функция хеширования паролей должна быть медленной и требовать памяти, чтобы перебор стоил дорого. Для паролей берут bcrypt, scrypt или Argon2, а не MD5 и не SHA.
Для сверки того, что файл скачался целиком и не побился. От случайного повреждения они защищают не хуже прочих, а суммы к старым архивам публикуются именно в MD5; CRC32 лежит внутри каждого zip и рядом с прошивками. Против злого умысла оба не работают: подделать файл под известный MD5 — решаемая задача, а под известный CRC32 — задача школьная.
Как контрольная сумма — да. Как подпись — нет: для SHA-1 коллизия построена на практике, и браузеры с центрами сертификации от него отказались. Если выбираете сейчас, берите SHA-256, а там, где нужен запас на годы вперёд, — SHA-512 или SHA3-256.
Нет: это односторонняя функция, исходные данные из хеша не восстанавливаются. Сервисы, которые обещают «расшифровать MD5», просто ищут строку в готовой таблице заранее посчитанных хешей. Для коротких и частых строк это работает, для длинных — нет.