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