Generatore HMAC

Crea e verifica firme HMAC con SHA-256, SHA-384, SHA-512 o SHA-1, con la chiave in testo, esadecimale o Base64.

Il modulo interattivo è disponibile quando JavaScript è attivo.

Come si usa

Scrivi o incolla il messaggio, inserisci la chiave segreta e scegli l’algoritmo; la firma compare mentre scrivi, in esadecimale e in Base64, ognuna con il suo pulsante «Copia». Viene calcolata con l’API Web Crypto del browser e non viene inviato nulla.

HMAC, definito nell’RFC 2104, combina una chiave segreta con una funzione di hash. Chiunque può calcolare lo SHA-256 di un messaggio, ma solo chi ha la chiave può calcolarne l’HMAC: una firma che corrisponde dimostra quindi che il messaggio viene da chi possiede la chiave e non è stato modificato lungo il percorso. La firma è lunga quanto l’hash: 32 byte con SHA-256, 48 con SHA-384, 64 con SHA-512 e 20 con SHA-1.

La chiave può essere scritta come testo, usato come byte UTF-8, oppure data in esadecimale o Base64 quando un servizio la mostra così: gli stessi caratteri letti in un altro formato sono un’altra chiave. Il messaggio viene firmato esattamente come è scritto, quindi uno spazio, un a capo o un carattere diverso cambia tutta la firma.

Per verificare un webhook, incolla il corpo grezzo della richiesta come messaggio, il segreto dell’endpoint come chiave e la firma ricevuta in «Firma da verificare». GitHub, per esempio, invia un header X-Hub-Signature-256 con sha256= seguito dall’HMAC-SHA256 del corpo in esadecimale; il prefisso viene ignorato. SHA-1 è offerto solo per i sistemi più vecchi: GitHub invia ancora un header HMAC-SHA1, solo per compatibilità.

Esempio

Verifica l’esempio di webhook documentato da GitHub: il segreto «It's a Secret to Everybody» e il contenuto «Hello, World!» danno la firma sha256= pubblicata da GitHub, quindi corrisponde.

  • Jefe · what do ya want for nothing?HMAC-SHA256 5bdcc146…64ec3843: il vettore di test dell’RFC 4231.
  • It's a Secret to Everybody · Hello, World!L’esempio documentato da GitHub: sha256=757107ea…8b043e17.
  • 0b0b…0b (hex, 20 bytes) · Hi ThereHMAC-SHA256 b0344c61…2e32cff7: caso di test 1 dell’RFC 4231, con la chiave in esadecimale.
  • abcdCome testo 4 byte, come esadecimale 2 byte (ab cd): due chiavi diverse e due firme diverse.

Domande frequenti

HMAC è la stessa cosa di un hash?

No. Un hash come SHA-256 non richiede una chiave, quindi chiunque può ricalcolarlo dopo aver cambiato il messaggio. Un HMAC richiede la chiave segreta, quindi solo chi la possiede può produrre una firma valida.

Perché la firma del mio webhook non corrisponde?

Di solito il messaggio non è, byte per byte, quello che è stato firmato: un framework ha analizzato e riscritto il JSON, tolto spazi o cambiato la codifica. Firma il corpo grezzo così come è arrivato, e controlla che il segreto sia quello di quell’endpoint e che il formato della chiave sia giusto.

Devo usare SHA-1?

Solo per comunicare con un sistema che lo richiede ancora. Le firme nuove usano SHA-256 o hash più lunghi, e GitHub, per esempio, mantiene il suo header di firma SHA-1 solo per compatibilità.

La mia chiave viene inviata da qualche parte?

No. La firma viene calcolata nel tuo browser con l’API Web Crypto. Anche così, evita di incollare segreti di produzione reali in un sito che non controlli: un segreto di prova basta per vedere come funzionano le firme.

Strumenti correlati