Генератор HMAC

Рассчитайте HMAC (код аутентификации сообщения на основе хеша) для текста с секретным ключом. Онлайн-калькулятор поддерживает HMAC-SHA-1, HMAC-SHA-256, HMAC-SHA-384 и HMAC-SHA-512, принимает ключи в текстовом, шестнадцатеричном или Base64-формате и выводит результат в виде шестнадцатеричной строки в нижнем регистре. Вычисления выполняются локально в браузере.

Секретный ключ
Текст
0 симв. · 0 байт
Попробовать:
Хеш
✓ Обработка выполняется локально в браузере ✓ Ввод не отправляется на сервер
Примеры
Пустое сообщение
Ключ: секрет Алгоритм: hmac-sha-256 Формат ключа: text
Вход (пусто)
Выход 6d8072acbc1c84445cda3fbf4a13e096262d7eae97b737e7d4a5be481c5067e8

Пустое сообщение является допустимым вводом. HMAC-SHA256 всё равно создаёт 64-символьную hex-метку на основе ключа «секрет».

Текстовый ключ
Ключ: секрет Алгоритм: hmac-sha-256 Формат ключа: text
Вход Привет, мир!
Выход 1e1507cff9806625f545b94d66e2a2864fe6aa2dbb0880ca98c045775be4c429

HMAC-SHA256 для строки «Привет, мир!» с текстовым UTF-8-ключом «секрет».

Другое сообщение и ключ
Ключ: ключ Алгоритм: hmac-sha-256 Формат ключа: text
Вход проверка
Выход 78f147a66cffa2f98d4eeecb5ec167d553777ae7204d0050c492f43a1d953058

При изменении сообщения или секретного ключа HMAC-SHA256 выдаёт совершенно другую метку.

Тестовый вектор HMAC-SHA256 из RFC 4231
Ключ: 0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b Алгоритм: hmac-sha-256 Формат ключа: hex
Вход Hi There
Выход b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7

В тесте № 1 из RFC 4231 используется 20-байтовый ключ в формате hex; этот стандартный результат позволяет проверить реализацию HMAC-SHA256.

Что такое HMAC?

HMAC (Hash-based Message Authentication Code) — стандартный алгоритм, который объединяет криптографическую хеш-функцию с секретным ключом. Он определён в RFC 2104 и преобразует сообщение любой длины в метку аутентификации фиксированного размера, также называемую кодом аутентификации сообщения или имитовставкой. HMAC-SHA256 — наиболее распространённый современный вариант; HMAC-SHA384 и HMAC-SHA512 дают более длинные метки, а HMAC-SHA1 всё ещё встречается в устаревших протоколах.

Получатель, владеющий тем же секретным ключом, может заново вычислить HMAC и сравнить его с полученной меткой. Совпадение подтверждает, что сообщение не изменилось и было создано стороной, знающей общий ключ. В отличие от обычного хеша SHA-256, злоумышленник не сможет сформировать корректную замену метки без ключа. HMAC — симметричный код аутентификации, а не шифрование и не электронная подпись с открытым ключом.

Как работает алгоритм HMAC

В упрощённой записи HMAC вычисляется по формуле H((K' ⊕ opad) || H((K' ⊕ ipad) || сообщение)). Сначала ключ приводится к размеру блока выбранной хеш-функции, затем объединяется с двумя разными константами для внутреннего и внешнего хеширования. Такая конструкция устраняет проблему продолжения сообщения, характерную для наивных схем вида hash(ключ || сообщение).

Выбранная хеш-функция определяет полную длину метки: HMAC-SHA1 выдаёт 20 байт (40 hex-символов), HMAC-SHA256 — 32 байта (64 символа), HMAC-SHA384 — 48 байт (96 символов), а HMAC-SHA512 — 64 байта (128 символов). Генератор показывает полную метку шестнадцатеричной строкой в нижнем регистре и не сокращает её.

Как пользоваться генератором HMAC
  1. Введите или вставьте исходное сообщение.
  2. Выберите HMAC-SHA256, HMAC-SHA1, HMAC-SHA384 или HMAC-SHA512.
  3. Укажите представление ключа: текст, hex или Base64.
  4. Введите секретный ключ. Калькулятор HMAC обновит результат в формате hex, после чего его можно скопировать.

Сообщение всегда преобразуется в байты UTF-8. В режиме Текст ключ также кодируется в UTF-8, а в режимах Hex и Base64 введённая строка сначала декодируется в исходные байты. На результат влияют пробелы, переносы строк, регистр букв, символы Unicode, выбранный алгоритм и формат ключа.

HMAC для API, вебхуков и JWT

HMAC часто применяется для аутентификации API-запросов, полезной нагрузки вебхуков, данных сессии и сообщений протоколов. При проверке получатель вычисляет HMAC для точных исходных байтов с общим секретным ключом и сравнивает метки за постоянное время. В рабочих протоколах в подписываемые данные также могут добавляться временная метка или одноразовое значение для защиты от повторной отправки запроса.

Всегда следуйте спецификации интеграции. Схемы подписи API нередко требуют канонической строки запроса, провайдеры вебхуков могут подписывать необработанное тело HTTP-запроса, а JWT HS256 подписывает заголовок и полезную нагрузку в кодировке Base64URL и представляет подпись также в Base64URL, а не в hex. Этот сервис вычисляет HMAC для введённого текста, но не формирует канонические строки конкретных провайдеров, не разбирает HTTP-запросы, не преобразует результат в Base64URL и не проверяет готовую метку автоматически.

FAQ

Используйте HMAC, если две стороны владеют общим секретом и должны обнаруживать преднамеренное изменение сообщения или подтверждать, что отправитель знает этот секрет. Обычный хеш, например SHA-256, не содержит ключа: изменив сообщение, любой человек может вычислить новый хеш. Если нужна открытая проверка без общего секрета, используйте подходящий алгоритм электронной подписи.

Для HMAC-SHA256 надёжным вариантом по умолчанию будет случайный ключ длиной 32 байта. Создавайте ключи криптографически стойким генератором случайных чисел и храните их в менеджере секретов или другом защищённом месте; для текстового представления случайных байтов подходят hex и Base64. Не используйте пароли, запоминающиеся фразы, повторно применяемые секреты и ключи, встроенные в клиентский код.

Рабочий ключ HMAC представляет собой последовательность байтов, но в конфигурациях эти байты часто хранят как текст в формате hex или Base64. Выберите формат, соответствующий вашему ключу: режим «Текст» кодирует символы в UTF-8, а режимы hex и Base64 декодируют строку в байты. Строки «616263», «YWJj» и «abc» обозначают одинаковые байты только при выборе соответственно hex, Base64 и текстового режима.

Расчёт HMAC выполняется локально через Web Crypto API браузера: сообщение и ключ не отправляются на сервер для вычисления. Если разрешено хранение настроек, страница может сохранить параметры формы, включая поле ключа, в локальном хранилище этого браузера. На общем устройстве очищайте поле и данные сайта и не вводите рабочие секреты в браузере или на сайте, которым не доверяете.

Используйте алгоритм, который требует протокол или сторона, проверяющая метку. Для новых интеграций обычно подходит широко поддерживаемый HMAC-SHA256. HMAC-SHA384 и HMAC-SHA512 выбирают, если этого требует спецификация. HMAC-SHA1 следует сохранять только ради совместимости с существующей системой; заменять алгоритмы произвольно нельзя, поскольку каждый из них выдаёт другую метку.

Нет. HMAC — односторонняя функция аутентификации, поэтому не существует декодера HMAC, который восстанавливает сообщение или секретный ключ по метке. Для проверки нужны исходное сообщение и тот же ключ: вычислите метку заново и сравните её с ожидаемым значением.

Выберите тот же алгоритм и формат ключа, введите точное исходное сообщение и ключ, затем сравните полученную метку с ожидаемой. В программном коде декодируйте обе метки в байты и используйте функцию сравнения за постоянное время, чтобы уменьшить риск атак по времени выполнения. Онлайн-генератор рассчитывает проверяемый HMAC, но не содержит отдельного поля автоматической проверки.

Несовпадение означает, что отличается хотя бы один байт входных данных или один параметр. Проверьте алгоритм хеширования, формат и байты ключа, кодировку сообщения, регистр букв, начальные и конечные пробелы, сериализацию JSON, нормализацию Unicode и переносы строк. Для API и вебхуков уточните, подписывает ли провайдер необработанное тело запроса или строго заданную каноническую строку и в каком формате опубликована метка: hex, Base64 или Base64URL.

HS256 использует HMAC-SHA256, однако для корректного JWT недостаточно хешировать произвольный JSON. Алгоритм подписывает ASCII-строку из заголовка и полезной нагрузки в кодировке Base64URL, соединённых точкой, а затем кодирует байты подписи в Base64URL без заполнения. Этот инструмент возвращает HMAC в шестнадцатеричном формате, поэтому позволяет проверить базовое вычисление, но не создаёт готовый JWT.
Связанные инструменты

SHA3-512 Hash Generator

Рассчитайте SHA3-512 hash из текста локально в браузере.