Как пользоваться
- Введите данные в поле Сообщение. Для двоичных данных выберите Шестнадцатеричная или Base64 в поле Кодировка сообщения.
- Введите секрет в поле Ключ и выберите, как он записан, в поле Кодировка ключа.
- Прочитайте четыре строки Значения HMAC. Скопируйте нужное значение или сравните его с тем, что выдаёт ваша система.
- Если значения отличаются от значений другой системы, сначала проверьте байты: другой перенос строки или другая кодировка дают другой HMAC.
Что такое HMAC
HMAC (RFC 2104) — это код проверки подлинности сообщения: короткое значение, которое может создать только тот, кто знает секретный ключ. Он строится из обычной хеш-функции H, которая применяется дважды к сообщению и ключу, поэтому одна и та же хеш-функция используется для всех четырёх строк таблицы. Так как нужен ключ, совпадение HMAC показывает, что сообщение не менялось и пришло от владельца ключа.
HMAC не скрывает сообщение. Любой, у кого есть сообщение, может его прочитать; HMAC позволяет только проверить его.
HMAC(K, m) = H((K XOR opad) || H((K XOR ipad) || m))
ipad = байт 0x36, повторённый B раз
opad = байт 0x5C, повторённый B раз
B = размер блока H: 64 байта для SHA-1 и SHA-256, 128 байтов для SHA-384 и SHA-512
Какая хеш-функция и какой ключ
HMAC-SHA-256 — обычный выбор, его используют многие вебхуки и API. HMAC-SHA-512 построен так же, но выдаёт более длинный результат. HMAC-SHA-1 всё ещё встречается в старых системах, и для новых решений его выбирать не стоит.
Ключ должен быть случайным и не короче выхода хеш-функции. Ключ, введённый как слово или короткая фраза, легко угадать, а угаданный ключ обесценивает HMAC.
Шестнадцатеричная запись и Base64
Обе формы показывают одни и те же байты. Шестнадцатеричная запись записывает каждый байт двумя цифрами, поэтому у SHA-256 64 цифры. Base64 записывает три байта четырьмя символами, поэтому у SHA-256 44 символа, последний из которых = — знак дополнения (RFC 4648).
- HMAC-SHA-1: 40 шестнадцатеричных цифр, 28 символов Base64
- HMAC-SHA-256: 64 шестнадцатеричные цифры, 44 символа Base64
- HMAC-SHA-384: 96 шестнадцатеричных цифр, 64 символа Base64
- HMAC-SHA-512: 128 шестнадцатеричных цифр, 88 символов Base64
Пример: тестовый случай 2 из RFC 4231
Ключ Jefe и сообщение what do ya want for nothing? — это второй тестовый случай RFC 4231 для SHA-256, SHA-384 и SHA-512 и RFC 2202 для SHA-1. Таблица ниже показывает, что выводит страница для них, а значение HMAC-SHA-256 совпадает с тем, что печатает RFC: 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843.
| Алгоритм | Шестнадцатеричная запись | Base64 |
|---|---|---|
| HMAC-SHA-1 | effcdf6ae5eb2fa2d27416d5f184df9c259a7c79 | 7/zfauXrL6LSdBbV8YTfnCWafHk= |
| HMAC-SHA-256 | 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843 | W9zBRr9gdU5qBCQmCJV1x1oAPwidJzmDnexYuWTsOEM= |
| HMAC-SHA-384 | af45d2e376484031617f78d2b58a6b1b9c7ef464f5a01b47e42ec3736322445e8e2240ca5e69e2c78b3239ecfab21649 | r0XS43ZIQDFhf3jStYprG5x+9GT1oBtH5C7Dc2MiRF6OIkDKXmnix4syOez6shZJ |
| HMAC-SHA-512 | 164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737 | Fkt6e/z4GeLjlfvnO1bgo4e9ZCIugx/WECcM1+olBVSXWL91wFqZSm0DT2X48Ob9yuqxo01Ka0tjbgcKOLznNw== |
Частые вопросы
HMAC — это то же самое, что шифрование сообщения?
Нет. HMAC не скрывает сообщение, поэтому его может прочитать каждый. Он показывает, что сообщение не менялось и что отправитель знает ключ. Для секретности нужно шифрование.
В чём разница между хешем и HMAC?
Хеш зависит только от сообщения, поэтому вычислить его может каждый. HMAC также требует секретного ключа, поэтому создать или проверить его может только тот, у кого есть ключ. Для обычных хешей используйте генератор хешей.
Почему мой HMAC отличается от того, что выдаёт моя библиотека?
Отличаются ключ или байты сообщения. Ключ, введённый как текст, — это его байты UTF-8, а те же буквы, записанные в шестнадцатеричном виде, — другие байты. Перенос строки в конце сообщения тоже меняет HMAC.
Какой длины должен быть ключ?
Используйте случайный ключ не короче выхода хеш-функции: 32 байта для HMAC-SHA-256. RFC 2104 настоятельно не рекомендует более короткий ключ, а ключ из слов или короткой фразы легко угадать.
Можно ли проверить подпись вебхука на этой странице?
Да, если вы используете точно те байты, которые были подписаны. Подписи вебхуков обычно вычисляются по исходному телу запроса, поэтому вставляйте тело без изменений: JSON, отформатированный заново, даёт другой HMAC.
Ключ или сообщение куда-нибудь отправляются?
Нет. HMAC считается в вашем браузере встроенной функцией SubtleCrypto. Ключ и сообщение не загружаются и не сохраняются.
Источники
- RFC 2104: HMAC: Keyed-Hashing for Message Authentication (на английском)
- RFC 4231: Identifiers and Test Vectors for HMAC-SHA-224, HMAC-SHA-256, HMAC-SHA-384 and HMAC-SHA-512 (на английском)
- RFC 2202: Test Cases for HMAC-MD5 and HMAC-SHA-1 (на английском)
- RFC 4648: The Base16, Base32, and Base64 Data Encodings (на английском)
- NIST FIPS 180-4: Secure Hash Standard (SHA-1 and the SHA-2 family) (на английском)
Цифры и текст в последний раз проверены вторник, 10 ноября 2026 г..