Текст
Хеши
HMAC
HMAC — это не хеш от склейки ключа и данных. Внутри ключ дважды заводится в хеш-функцию с двумя разными добавками, поэтому SHA256(ключ + данные) даёт другое значение и никогда не сойдётся с HMAC. Если подпись не сходится с бэкендом — сначала проверьте, что обе стороны считают именно HMAC.
Ключ здесь берётся как есть, байтами UTF-8. Если на бэкенде ключ хранится в Base64 или hex и перед подписью раскодируется в байты, вписывать сюда его текстовый вид бесполезно — сойдётся только при совпадении байтов.
Что здесь важно знать
MD5 здесь нет, и это решение, а не недоделка. Браузер умеет считать только SHA-семейство, MD5 в его наборе нет. Своей реализации криптографического алгоритма мы не держим: сайт про то, чтобы быстро посмотреть и пойти дальше, а не про криптографию. Если пришли сверить MD5 — этот инструмент не поможет, и лучше узнать об этом сразу, чем после десяти минут поисков нужной кнопки.
Хеш не расшифровывается обратно. Это самый частый вопрос, и ответ на него «никак»: хеш не шифрование, исходной строки в нём нет. Сервисы, которые «расшифровывают» MD5, на самом деле ищут значение в готовом словаре — сработает на «123456» и не сработает ни на чём осмысленном.
Считается от байтов, а текст в байты превращает кодировка. Здесь строка кодируется в UTF-8 — так же, как это делают почти все современные бэкенды. Но если вторая сторона кодирует в cp1251 или UTF-16, у неё получатся другие байты и другой хеш при том же тексте на экране. Это причина номер один для «хеши не сходятся», и на глаз она не видна вовсе: тексты выглядят одинаково. Кодировки разбирает «Кодировки».
Причина номер два — невидимое. Перевод строки в конце, который прицепился при копировании; CRLF вместо LF после переноса файла между Windows и Linux; BOM в начале файла; неразрывный пробел вместо обычного. Всё это меняет байты и, значит, хеш. Поэтому при несовпадении инструмент пробует не только вашу строку, но и её очевидные варианты, и говорит, какой из них сошёлся — это и есть ответ, чем ваш текст отличается от чужого. Посчитать невидимое помогает «Счётчик символов».
Регистр hex значения не имеет. A1B2 и a1b2 — одни и те же байты, сверка это учитывает. А вот пробел внутри ожидаемого хеша значение имеет, и его мы вырезаем: из вставленной строки берётся первая последовательность hex подходящей длины, поэтому можно вставлять вывод sha256sum целиком, вместе с именем файла.
Длина сама называет алгоритм. 32 знака — MD5, 40 — SHA-1, 64 — SHA-256, 96 — SHA-384, 128 — SHA-512. По длине нельзя отличить SHA-256 от других 32-байтовых хешей, но на практике этого хватает, чтобы понять, что вам прислали.
SHA-1 оставлен намеренно. Для защиты он давно не годится, но в работе встречается постоянно: им подписаны коммиты git, на нём стоят старые интеграции и контрольные суммы в чужих спецификациях. Инструмент показывает то, что реально попадается, а не то, что стоило бы применять.
Файл читается целиком в память вкладки, поэтому предел — 50 МБ. Для образа диска этот инструмент не годится, для вложения из тикета — вполне.
Частые вопросы
Здесь есть MD5?
Нет. Браузерный SubtleCrypto MD5 не считает, а свою реализацию криптоалгоритма сайт не держит принципиально. Страница подсказывает, как посчитать MD5 локально одной командой.
Файл загружается на сервер?
Нет: файл читается в память вкладки и хешируется браузером на месте. Ограничение — 50 МБ.
Почему хеши не совпадают, хотя строки выглядят одинаково?
Чаще всего байты различаются невидимо: перевод строки в конце, CRLF вместо LF, пробелы по краям. Инструмент проверяет эти варианты сам и называет тот, что сошёлся.