Ce este acest instrument?
HMAC înseamnă Hash-based Message Authentication Code. Combină o cheie secretă cu un mesaj și o funcție hash standard (precum SHA-256) pentru a produce un rezumat de lungime fixă. Oricine are aceeași cheie și mesaj va calcula exact același HMAC — dar fără cheie, este imposibil din punct de vedere computațional să produci un HMAC valid pentru un mesaj, chiar dacă cunoști algoritmul hash folosit.
Aceasta este diferența esențială față de un hash simplu: un hash simplu (MD5, SHA-256 etc.) primește doar mesajul ca intrare, deci oricine îl poate calcula și nu dovedește nimic despre cine l-a creat. Un HMAC primește mesajul *și* o cheie secretă, deci un HMAC valid dovedește că expeditorul deținea secretul — este un mecanism de autentificare, nu doar o verificare de integritate.
HMAC este standardizat oficial de NIST în FIPS 198-1 și definit pentru protocoalele de internet în IETF RFC 2104. Acest instrument calculează HMAC-uri folosind API-ul Web Crypto nativ al browserului tău (`crypto.subtle.sign` cu algoritmul HMAC), care implementează corect RFC 2104, spre deosebire de o versiune JavaScript scrisă manual.
De ce să-l folosești?
- Semnează cererile API pentru ca serverul care le primește să poată verifica faptul că cererea a provenit de la un deținător al secretului partajat și nu a fost modificată.
- Verifică payload-urile webhook (Stripe, GitHub, Shopify și servicii similare semnează toate corpurile webhook cu HMAC-SHA256).
- Generează tokenuri de autentificare sau coduri de unică folosință care depind de un secret partajat.
- Compară rezultatul propriei implementări HMAC cu o valoare de referință cunoscută ca fiind corectă.
- 100% local: cheia secretă și mesajul tău nu părăsesc niciodată browserul, deci este sigur să testezi secrete reale.
Cum se folosește
- Introdu cheia secretă în câmpul „Secret Key”.
- Introdu mesajul pe care vrei să îl autentifici în câmpul „Message”.
- Rezultatele HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 și HMAC-SHA512 sunt generate instantaneu (bifează „Uppercase output” dacă sistemul tău țintă așteaptă litere mari).
- Fă clic pe „Copy” lângă HMAC-ul de care ai nevoie.
Exemplu
Intrare
Secret Key: key
Message: The quick brown fox jumps over the lazy dogRezultat
HMAC-SHA256: f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8
HMAC-SHA1: de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9Acesta este un vector de test standard, publicat: cu cheia „key” și acest mesaj exact, HMAC-SHA256 și HMAC-SHA1 produc întotdeauna aceste valori în orice implementare corectă, deci poți verifica independent rezultatul acestui instrument.
HMAC versus hash simplu: când ai nevoie de o cheie
Întrebarea decisivă este: trebuie să dovedești cine a creat acest rezumat sau doar că conținutul nu s-a schimbat? Dacă o sumă de control publică este suficientă — verificarea faptului că un fișier descărcat corespunde cu ceea ce a indicat editorul, deduplicarea înregistrărilor — un hash simplu funcționează și oricine îl poate verifica, fără cheie. Dacă trebuie să dovedești că rezumatul ar fi putut fi produs doar de cineva care deține un anumit secret — autentificarea unui apelant API, încrederea în expeditorul unui webhook — ai nevoie de HMAC, deoarece un hash simplu oferă unui atacator fără secret aceeași capacitate de a falsifica un rezumat valid ca și expeditorul real.
→ Multi-Algorithm Hash Generator · JWT Decoder · MD5 Generator
Comparație între cei patru algoritmi HMAC
Toți patru folosesc aceeași construcție HMAC din RFC 2104, diferind doar prin funcția hash de bază și, prin urmare, prin lungimea ieșirii.
| Algoritm | Dimensiunea ieșirii | Utilizare tipică |
|---|---|---|
| HMAC-SHA1 | 160 de biți (40 caractere hex) | API-uri vechi, semnături OAuth 1.0a mai vechi |
| HMAC-SHA256 | 256 de biți (64 caractere hex) | Semnarea cererilor API, JWT HS256, verificare webhook |
| HMAC-SHA384 | 384 de biți (96 caractere hex) | Semnături cu asigurare mai ridicată, unde este necesară o ieșire mai lungă |
| HMAC-SHA512 | 512 de biți (128 caractere hex) | Rezumate de lungime maximă pentru aplicații de înaltă securitate |
Cazuri de utilizare comune
- Semnarea cererilor API de ieșire cu un secret partajat, pentru ca serverul să poată verifica identitatea apelantului.
- Verificarea payload-urilor webhook primite (antetele Stripe-Signature, GitHub X-Hub-Signature-256 și similare folosesc toate HMAC-SHA256).
- Generarea și validarea porțiunii de semnătură a unui JWT semnat cu HS256/HS384/HS512.
- Testarea faptului că implementarea HMAC pe partea de server sau de client corespunde ieșirii așteptate înainte de a o implementa în producție.
Întrebări frecvente
Ce este HMAC?
HMAC (Hash-based Message Authentication Code) combină o cheie secretă cu un mesaj folosind o funcție hash pentru a produce un rezumat care dovedește atât integritatea mesajului, cât și faptul că expeditorul deține cheia. Este definit în NIST FIPS 198-1 și IETF RFC 2104.
Care este diferența dintre HMAC și un hash simplu?
Un hash simplu (SHA-256, MD5 etc.) primește doar un mesaj ca intrare — oricine îl poate calcula, deci dovedește doar că mesajul nu a fost corupt, nu cine l-a trimis. Un HMAC primește un mesaj plus o cheie secretă: dacă trebuie să dovedești că un mesaj a provenit de la cineva care deține un anumit secret (o semnătură API, un expeditor de webhook), ai nevoie de HMAC. Dacă trebuie doar să verifici că un fișier sau mesaj nu s-a schimbat și nu îți pasă de dovedirea autorului, un hash simplu este suficient.
Este cheia mea secretă trimisă către un server?
Nu. Acest instrument calculează HMAC-ul integral în browserul tău, folosind API-ul Web Crypto. Cheia și mesajul tău nu sunt niciodată transmise nicăieri — poți testa în siguranță secrete reale de producție.
Ce algoritm ar trebui să folosesc — SHA-1, SHA-256, SHA-384 sau SHA-512?
Folosește HMAC-SHA256, cu excepția cazului în care un sistem anume cere altceva — este standardul de facto pentru semnarea API-urilor (folosit de AWS, Stripe, webhook-urile GitHub și majoritatea API-urilor moderne) și oferă o marjă solidă de securitate. HMAC-SHA1 este încă comun în sisteme vechi (precum implementările OAuth 1.0a mai vechi), dar hash-ul de bază al SHA-1 este considerat mai slab; HMAC-SHA384/512 sunt folosite acolo unde este necesară în mod specific o ieșire mai lungă sau o marjă de securitate suplimentară.
Este HMAC-SHA1 nesigur, din moment ce SHA-1 simplu este spart?
Atacurile de coliziune din 2017 au spart SHA-1 ca funcție hash simplă, dar HMAC-SHA1 este încă considerat solid din punct de vedere criptografic, deoarece securitatea HMAC nu depinde de rezistența la coliziuni în același mod. Cu toate acestea, preferă HMAC-SHA256 sau superior pentru sisteme noi — nu există niciun dezavantaj practic și evită complet problema.
Care sunt utilizările practice comune ale HMAC?
Semnarea cererilor REST API pentru ca un server să poată verifica faptul că apelantul deține secretul API partajat; verificarea payload-urilor webhook de la servicii precum Stripe, GitHub și Shopify pentru a ști că o cerere a provenit cu adevărat de la ele și nu a fost falsificată; generarea parolelor de unică folosință bazate pe timp (TOTP/HOTP) pentru autentificarea în doi factori; și semnarea tokenurilor JWT cu algoritmii HS256/HS384/HS512.