# Генератор на 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 добавя префикса v0= към hex, а много системи, базирани на 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%B2%20OneClick%20Pro)

[Реклама Комплект плъгини за агенти за WordPress.](https://sleekwp.com/?ref=oneclickpro)
