Генератор HMAC

HMAC, это алгоритм за большинством подписанных вебхуков, заголовков AWS Signature v4 и JWT-токенов HS256. Введите сообщение и секретный ключ, выберите семейство хешей, и этот генератор произведет HMAC ровно так, как указывает RFC 2104, полезно для проверки того, что собирается отправить ваш бэкенд, или для воспроизведения подписи, полученной от API.

Как вычислить HMAC

  1. 1

    Вставьте сообщение

    Точные байты для подписи: полезная нагрузка вебхука, канонический запрос или любая строка.

  2. 2

    Введите секретный ключ

    Может быть текстом или hex. Генератор дополняет или хеширует его до размера блока согласно RFC.

  3. 3

    Выберите алгоритм хеширования

    SHA-256 по умолчанию; выберите SHA-1, SHA-384, SHA-512 или MD5 для совместимости со старыми системами.

  4. 4

    Скопируйте подпись

    Вывод выдаётся в hex в нижнем регистре, готовый к вставке в конфигурацию вебхука или заголовок Authorization.

HMAC под капотом

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

Рецепт RFC 2104

HMAC(k, m) = H((k' ⊕ opad) ∥ H((k' ⊕ ipad) ∥ m))

где k', это ключ, дополненный до размера блока хеша, opad = 0x5c повторенный, а ipad = 0x36 повторенный.

Выбор алгоритма

Алгоритм Размер блока Длина вывода Рекомендуется для
HMAC-SHA-256 64 байта 32 байта Современный дефолт, подпись вебхуков
HMAC-SHA-384 128 байт 48 байт Подпись API повышенной безопасности
HMAC-SHA-512 128 байт 64 байта Долгоживущие токены
HMAC-SHA-1 64 байта 20 байт Устаревшее (AWS S3 v2, OAuth 1.0)
HMAC-MD5 64 байта 16 байт Только устаревшее; избегайте для нового

Где встречается HMAC

  • Вебхуки GitHub, Stripe, Shopify: заголовок X-Hub-Signature-256, Stripe-Signature и т. д.
  • AWS Signature v4: цепочка HMAC-SHA256 поверх канонического запроса.
  • JWT HS256: подпись токена это HMAC-SHA-256(header.payload, secret).
  • Токены сброса пароля: HMAC поверх user_id + срок действия + секрет сайта.

Частые ошибки

  • Передача hex-кодированного ключа как текста вместо предварительного декодирования в байты.
  • Подпись не тех байтов полезной нагрузки: некоторые вебхуки подписывают сырое тело запроса, включая пробелы, другие подписывают каноническую форму.
  • Использование == в JavaScript или Python для сравнения подписей; всегда используйте timing-safe сравнение, чтобы противостоять атакам по времени.

Часто задаваемые вопросы

Почти всегда потому, что отличаются байты сообщения. Подпись тела, разобранного как JSON, вносит изменения в пробелах; подписывайте сырое тело запроса. Также убедитесь, что ключ декодируется одинаково (hex против сырых байтов) с обеих сторон.

Да. Если ключ короче размера блока хеша, он дополняется нулями; если длиннее, сначала хешируется. RFC 2104 рекомендует ключи длиной не менее вывода (32 байта для SHA-256).

HMAC по-прежнему устойчив к известным атакам коллизий MD5, потому что атака не переносится на конструкцию HMAC. Тем не менее используйте HMAC-SHA-256 для любого нового кода, инструменты и аудиторы ожидают именно его.

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

Сопутствующие инструменты

Кодировщик файлов Base64

Кодируйте любой файл (PDF, ZIP, изображение, исполняемый файл) в текст Base64 для встраивания в JSON, письма, YAML или data URI. Работает локально в браузере, без загрузки на сервер.

Генератор CSR

Создайте запрос на подпись сертификата в формате PEM и соответствующий закрытый ключ RSA. Укажите общее имя, поля организации и размер ключа (2048, 3072 или 4096 бит).

Кодировщик и декодировщик Base58

Кодируйте текст UTF-8 или шестнадцатеричные байты и безопасно декодируйте Base58 с алфавитом Bitcoin, Ripple или Flickr.

Генератор SSL-сертификатов

Создайте самоподписанный сертификат SSL/TLS и закрытый ключ RSA полностью в браузере. Свои Common Name, SAN и срок действия, экспорт в PEM.

Кодировщик шифра A1Z26

Кодируйте текст шифром A1Z26 (A=1, B=2, ... Z=26) или декодируйте числовую последовательность обратно в буквы, выбрав разделитель.

Идентификатор шифрования

Вставьте зашифрованный текст, и идентификатор предложит вероятные схемы кодирования/шифрования: Base64, hex, двоичный, Морзе, Цезарь или подстановочный, JWT и распространенные хеши.

Инструмент доступен на других языках