# Генератор HMAC-SHA256

Создайте подпись HMAC-SHA256 на основе сообщения и секретного ключа. Инструмент кодирует их в UTF-8, применяет конструкцию HMAC из RFC 2104 с SHA-256 и возвращает тег длиной 256 бит в формате hex или Base64. Разработчики используют его для отладки подписей вебхуков от таких сервисов, как Stripe, GitHub и Slack, подписания запросов API и сравнения результатов со своим кодом. Ключ не возвращается и не записывается в журнал.

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

### Что такое HMAC-SHA256?

HMAC-SHA256 — это код аутентификации сообщения на основе SHA-256 и секретного ключа, определенный в RFC 2104. Только владелец ключа может вычислить правильный тег для сообщения. Результат занимает 32 байта, или 64 hex-символа.

### Как проверить подпись вебхука?

Вставьте точное исходное тело запроса в качестве сообщения, а секрет для подписи — в качестве ключа, затем сравните результат с заголовком подписи. Многие сервисы подписывают составную строку, например временную метку Stripe, точку и тело запроса. Сформируйте сообщение в соответствии с их документацией. Даже один измененный байт приводит к другому тегу.

### Есть ли известный тестовый вектор?

В тестовом примере 2 из RFC 4231 используется ключ Jefe и сообщение what do ya want for nothing? Ожидаемый результат — 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843. Этот инструмент возвращает именно это значение.

### Как кодируются ключ и сообщение?

Оба значения кодируются как текст в UTF-8. Если секрет задан в hex или Base64, как это делают некоторые сервисы, соответствующие байты отличаются от отображаемого текста, поэтому сначала нужно декодировать ключ в собственном коде. Пробелы и переносы строк учитываются в обоих полях.

### Сохраняется ли мой секретный ключ?

Нет. Ключ используется только для вычисления тега во время запроса. Он не включается в ответ, не записывается в журнал и не сохраняется.

### Может ли ключ быть пустым или очень длинным?

HMAC принимает ключи любой длины, в том числе пустые. Ключи длиннее 64 байт сначала хешируются с помощью SHA-256, как указано в RFC. Для реального использования выберите случайный ключ длиной не менее 32 байт.

### Что выбрать: hex или Base64?

Используйте формат, который передает другая сторона. GitHub и Stripe используют hex, а Slack добавляет к hex префикс v0=; во многих системах на основе AWS и JWT используется Base64. Оба формата кодируют одни и те же 32 байта.

### Является ли HMAC-SHA256 тем же, что и SHA-256 от объединенных ключа и сообщения?

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

### Как сравнивать подписи в коде?

Используйте функцию сравнения за постоянное время, например crypto.timingSafeEqual в Node.js или hmac.compare_digest в Python. Обычное сравнение строк может раскрыть информацию о времени выполнения, связанную с ожидаемым тегом.

### Каков максимальный размер сообщения?

Общий размер сообщения и ключа может составлять до 5 MiB текста. Этого достаточно для типичных полезных данных вебхуков и запросов API.

Ваша реклама здесь?

[Напишите нам по электронной почте](mailto:hi@dennn.is?subject=%D0%A0%D0%B5%D0%BA%D0%BB%D0%B0%D0%BC%D0%B0%20%D0%BD%D0%B0%20OneClick%20Pro)

[Реклама Набор плагинов для работы агентов с WordPress.](https://sleekwp.com/?ref=oneclickpro)
