Генератор HMAC
КриптоВычисляет подписи HMAC-SHA-1/256/384/512 через Web Crypto. Вывод в Hex или Base64, полностью в браузере.
Удалённые URL не запрашиваются; вставьте JSON напрямую.
На этой странице
Что такое HMAC?#
HMAC расшифровывается как Hash-based Message Authentication Code (код аутентификации сообщений на основе хеша). Обычный хеш (вроде SHA-256) отвечает на вопрос «изменился ли этот байтовый поток?». HMAC отвечает на более сильный: «изменился ли этот байтовый поток, и отправлен ли он тем, кто действительно знает мой общий секретный ключ?». Эта разница существенна везде, где сообщение пересекает канал, которому вы не полностью доверяете, — callback’и webhook’ов, подписанные URL, подпись API-запросов, межсервисные токены.
Механически HMAC подмешивает секретный ключ в хеш-функцию заданным образом (два раунда с паддингом), так что подделать дайджест без ключа невозможно. Результат — байтовая строка фиксированной длины, размер которой совпадает с нижележащим хешем: 20 байт для SHA-1, 32 для SHA-256, 48 для SHA-384, 64 для SHA-512.
Страница вычисляет HMAC прямо в вашем браузере через Web Crypto API. Вы выбираете хеш, вставляете сообщение и секрет, получаете дайджест в Hex или Base64.
Как пользоваться#
- Введите или вставьте Сообщение — payload, который нужно аутентифицировать. Это те байты, которые получатель будет хешировать на своей стороне.
- Введите Секретный ключ. По умолчанию поле скрыто; нажмите значок глаза справа, чтобы показать его при вводе. И ключ, и сообщение кодируются как UTF-8.
- Выберите Алгоритм:
- SHA-1 — 160 бит. Быстрый, но подходит только для устаревших схем HMAC (некоторые старые потоки подписи всё ещё его требуют). Не используйте SHA-1 для цифровых подписей.
- SHA-256 — 256 бит. Современный стандарт; подавляющее большинство подписей webhook’ов (Stripe, GitHub, Slack-подобные потоки) используют HMAC-SHA-256.
- SHA-384 / SHA-512 — более длинные дайджесты, чуть выше стойкость к коллизиям, немного медленнее. Выбирайте, когда принимающая система явно требует этого.
- Выберите Формат вывода: Hex (типично для заголовков в стиле
X-Signature) или Base64 (типично, когда дайджест встроен в JSON или токен). - Нажмите Создать. Дайджест появится в правой панели; строка состояния показывает алгоритм и длину в байтах как проверку на адекватность. Копировать забирает его.
Ключевые возможности#
- На базе Web Crypto. Использует нативный
crypto.subtleбраузера — тот же примитив, что в продакшен-коде, а не JavaScript-реализацию. - Проверка длины. Каждый дайджест сверяется с ожидаемой для алгоритма длиной в байтах, поэтому обрезанный или подменённый результат не проскочит незаметно.
- Hex или Base64. Переключение одним кликом; без повторного ввода.
- Секрет остаётся локальным. Поле ключа отображается как пароль и никогда не покидает страницу — бэкенда нет.
- Учитывает защищённый контекст. Если страница вдруг загружена по обычному HTTP,
crypto.subtleнедоступен — инструмент прямо об этом сообщает, а не выдаёт неверный ответ.
Разбор примера#
Классическая эталонная пара (RFC 4231) использует ключ Jefe и сообщение what do ya want for nothing?. На этой странице при SHA-256 и Hex дайджест равен:
5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843
Переключитесь на SHA-512 с теми же входами — и дайджест удвоится в длину:
164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737
Оба значения воспроизводятся прямо здесь: загрузите Пример, затем Создать. Эта же пара — то, чем собственный набор тестов инструмента проверяет корректность: если вы когда-нибудь получите другой дайджест, значит, страницу подменили.
FAQ#
SHA-256 или SHA-512 — что использовать?#
Для HMAC конкретно SHA-256 — прагматичный стандарт: его применяют все крупные подписыватели webhook’ов, он быстр, а 256 бит дайджеста уже далеко за пределами перебора. Переходите на SHA-512, только если (а) этого требует принимающая система или (б) вы проектируете новый протокол с нуля и хотите дополнительный запас по коллизиям ценой умеренной потери скорости. SHA-1 избегайте вовсе, кроме случаев подгонки под устаревшую систему.
HMAC — это то же самое, что зашифровать сообщение?#
Нет. HMAC только аутентифицирует — доказывает, что сообщение не было изменено и пришло от того, кто владеет ключом. Само сообщение остаётся открытым текстом. Если нужна и конфиденциальность, скомбинируйте HMAC со схемой шифрования или используйте режим аутентифицированного шифрования вроде AES-GCM.
Можно ли восстановить секретный ключ из дайджеста?#
Нет. Дайджест — односторонняя функция от сообщения и ключа; восстановить ключ по выходу вычислительно нецелесообразно. При этом короткий или угадываемый ключ всё же можно подобрать перебором, проверяя кандидатов офлайн, — поэтому используйте ключ хотя бы со 128 битами настоящей энтропии, а не придуманный человеком пароль.
Получатель говорит, что моя подпись не совпадает. Что проверить первым делом?#
В девяти случаях из десяти — представление байтов сообщения: завершающие переводы строки, URL-кодирование против сырого тела, пробелы в JSON или другой порядок полей. Сравните в точности те байты, что вы подписали, с теми, что хешировал получатель, символ за символом, прежде чем проверять что-либо ещё.