devopscodepro
Язык
Работает полностью в браузере — данные не покидают страницу.

HMAC-генератор

HMAC-подписи для отладки вебхуков: выберите алгоритм, вставьте секрет, сравните с подписью, которую прислал провайдер.

Введите секретный ключ и сообщение, чтобы вычислить подпись.

Отладка подписей вебхуков

Stripe, GitHub, Shopify и практически каждый провайдер вебхуков подписывает полезную нагрузку через HMAC: тело запроса хешируется с общим секретом, результат уходит в заголовок. Когда ваша проверка не сходится, инструмент показывает, какой подпись должна была быть: вставьте секрет, вставьте тело, сравните с тем, что пришло.

Поле сравнения понимает форматы, которые провайдеры реально шлют: чистый hex, префикс sha256=… (GitHub) или base64 (Shopify). Сравнение выполняется за постоянное время, вердикт — совпало или нет.

Всё выполняется в браузере. Вставлять секрет вебхука на страницу, которая отправит его на чей-то сервер, — значит обнулить смысл секрета; здесь вкладка Network остаётся пустой.

Мой HMAC не совпадает с провайдерским. Что не так?

Почти всегда — сообщение. HMAC считается от точных сырых байтов тела запроса: JSON, пересериализованный фреймворком, срезанный перевод строки или другая нормализация Unicode меняют дайджест. Сверяйте по сырому телу, до любого парсинга.

Какую кодировку выбрать для ключа?

Ту, в которой провайдер его выдал. Секрет Stripe whsec_… используется как буквальная UTF-8-строка; некоторые провайдеры выдают hex или base64, которые сначала нужно декодировать в байты. Неверный выбор даёт стабильно неправильную подпись.

HMAC-SHA-256 ещё безопасен? Не пора ли на SHA3?

HMAC-SHA-256 не взломан и не близок к этому — конструкция HMAC на практике оставляет неподделываемыми даже варианты с MD5 и SHA-1, хотя вводить их сегодня не стоит. Варианты на SHA3 здесь для систем, которые на них стандартизировались, а не потому, что SHA-2 нуждается в замене.

Зачем сравнение за постоянное время?

Побайтовое сравнение с ранним выходом через тайминг ответа выдаёт, сколько первых байтов совпало, — и подпись подбирается по байту за раз. Серверная проверка тоже должна использовать constant-time сравнение; в большинстве фреймворков оно есть.

Смежные инструменты: Хеши и чексуммы, Декодер JWT и Шифрование.