Generator HMAC-SHA256
Creați o semnătură HMAC-SHA256 dintr-un mesaj și o cheie secretă. Instrumentul le codifică pe ambele ca UTF-8, aplică construcția HMAC din RFC 2104 cu SHA-256 și returnează eticheta de 256 biți în format hexazecimal sau Base64. Dezvoltatorii îl folosesc pentru a depana semnăturile webhook de la servicii precum Stripe, GitHub sau Slack, pentru a semna solicitări API și pentru a compara rezultatele cu propriul cod. Cheia nu este niciodată returnată sau înregistrată în jurnale.
Întrebări frecvente
Ce este HMAC-SHA256?
HMAC-SHA256 este un cod de autentificare a mesajului construit folosind SHA-256 și o cheie secretă, așa cum este definit în RFC 2104. Numai cineva care deține cheia poate calcula eticheta corectă pentru un mesaj. Rezultatul are 32 de octeți sau 64 de caractere hexazecimale.
Cum verific o semnătură webhook?
Lipiți corpul brut exact al solicitării ca mesaj și secretul de semnare ca cheie, apoi comparați rezultatul cu antetul semnăturii. Multe servicii semnează o combinație, de exemplu marcajul temporal Stripe, un punct și corpul, așa că alcătuiți mesajul conform descrierii din documentația lor. O singură modificare de octet produce o etichetă diferită.
Există un vector de test cunoscut?
Cazul de test 2 din RFC 4231 folosește cheia Jefe și mesajul what do ya want for nothing? și se așteaptă la 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843. Acest instrument returnează exact această valoare.
Cum sunt codificate cheia și mesajul?
Ambele sunt codificate ca text UTF-8. Dacă secretul este furnizat în hexazecimal sau Base64, așa cum se întâmplă în unele servicii, octeții diferă de textul afișat, iar cheia trebuie mai întâi decodificată în propriul cod. Spațiile albe și întreruperile de linie contează în ambele câmpuri.
Este stocată cheia mea secretă?
Nu. Cheia este folosită doar pentru a calcula eticheta în timpul solicitării. Nu este inclusă în răspuns, nu este înregistrată în jurnale și nu este stocată.
Poate cheia să fie goală sau foarte lungă?
HMAC acceptă chei de orice lungime, inclusiv o cheie goală. Cheile mai lungi de 64 de octeți sunt mai întâi transformate în hash cu SHA-256, conform specificației RFC. Pentru utilizare reală, alegeți o cheie aleatorie de cel puțin 32 de octeți.
Ar trebui să aleg hexazecimal sau Base64?
Folosiți formatul trimis de cealaltă parte. GitHub și Stripe folosesc formatul hexazecimal, în timp ce Slack adaugă prefixul v0= înaintea valorii hexazecimale, iar multe sisteme bazate pe AWS și JWT folosesc Base64. Ambele codifică aceiași 32 de octeți.
Este HMAC-SHA256 același lucru cu SHA-256 dintre cheie și mesaj concatenate?
Nu. HMAC calculează hashul mesajului de două ori, folosind chei interne și externe completate, ceea ce protejează împotriva atacurilor de extensie a lungimii. Concatenarea cheii și a mesajului, urmată de o singură calculare a hashului, produce un rezultat diferit și mai slab.
Cum ar trebui să compar semnăturile în codul meu?
Folosiți o funcție de comparare cu timp constant, precum crypto.timingSafeEqual în Node.js sau hmac.compare_digest în Python. O comparație obișnuită de șiruri poate divulga informații temporale despre eticheta așteptată.
Care poate fi dimensiunea mesajului?
Mesajul și cheia pot avea împreună până la 5 MiB de text. Această limită acoperă payloadurile webhook obișnuite și solicitările API.