# Генератор 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)
