HMAC-generator
Beregn HMAC-SHA1, SHA-256, SHA-384 eller SHA-512 med tekst-, hex- eller Base64-nøkkel, få hex- og Base64-utdata og kontroller en webhook-signatur i nettleseren.
Meldingen signeres nøyaktig slik den er skrevet, kodet som UTF-8, med mellomrom og linjeskift.
- HMAC (hex)
- HMAC (Base64)
- Webhook-signaturoverskrift (GitHub-stil)
Sammenligningen kjører i konstant tid, slik en server bør gjøre det, så tiden den tar, avslører ikke hvor mange tegn som stemmer.
Slik beregner du en HMAC
- Lim inn Melding. For en webhook må dette være det rå forespørselsinnholdet, byte for byte.
- Skriv inn Hemmelig nøkkel og velg Nøkkelformat: Tekst (UTF-8), Heksadesimal eller Base64.
- Velg Algoritme: HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 eller HMAC-SHA512.
- Resultatet oppdateres mens du skriver, og du kan også klikke Generer HMAC. Du får HMAC (hex), HMAC (Base64) og en Webhook-signaturoverskrift (GitHub-stil), hver med en Kopier-knapp.
- For å kontrollere en signatur du har mottatt, limer du den inn i Sammenlign med en forventet signatur (hex, Base64 eller sha256=…). Verktøyet forteller om den samsvarer.
Meldingen kodes som UTF-8 nøyaktig slik den er skrevet, med mellomrom og linjeskift. Beregningen bruker nettleserens Web Crypto API. Meldingen og nøkkelen forlater aldri enheten din.
Hva en HMAC er
En HMAC (hash-based message authentication code, RFC 2104) kombinerer en hemmelig nøkkel med en hashfunksjon:
HMAC(K, m) = H((K′ ⊕ opad) ‖ H((K′ ⊕ ipad) ‖ m))
der K′ er nøkkelen utfylt til hashfunksjonens blokkstørrelse (og hashet først hvis den er lengre), og ipad/opad er faste konstanter. Bare den som kjenner nøkkelen, kan lage riktig kode for en melding, og enhver endring i meldingen endrer koden fullstendig. Derfor brukes HMAC til å signere webhooks, API-forespørsler (for eksempel AWS Signature Version 4) og JSON Web Tokens med HS256.
En HMAC er ikke kryptering: meldingen skjules ikke. Den er heller ikke en passordhash. Til lagring av passord bruker du en treg funksjon som bcrypt eller Argon2.
Lengden på utdata avhenger av algoritmen: 20 byte for SHA-1, 32 for SHA-256, 48 for SHA-384 og 64 for SHA-512. HMAC-SHA1 regnes fortsatt som sikker som MAC, men velg SHA-256 for nye systemer. Vi anbefaler en tilfeldig nøkkel som er minst like lang som utdata (32 byte for HMAC-SHA256). Med hex- eller Base64-nøkler kan du skrive inn slike tilfeldige byte direkte.
Kontroller en GitHub-webhook
GitHub signerer hver levering med webhook-hemmeligheten din og sender resultatet i overskriften X-Hub-Signature-256 som sha256= etterfulgt av hex-HMAC-SHA256 av innholdet. GitHubs eget eksempel i dokumentasjonen bruker hemmeligheten It's a Secret to Everybody og innholdet Hello, World!. Skriv dem inn her med HMAC-SHA256, så viser overskriften:
X-Hub-Signature-256: sha256=757107ea0eb2509fc211221cce984b8a37570b6d7586c22c46f4379c8b043e17
Sammenligningsfeltet godtar hele overskriftslinjen, verdien sha256=…, eller en ren hex- eller Base64-signatur (Stripe, Shopify og Slack bruker lignende ordninger med egne overskrifter og signerte strenger). For SHA-384 og SHA-512 viser verktøyet en generisk X-Signature-overskrift, siden det ikke finnes noen felles standard.
Sammenligning i konstant tid
En server som sammenligner signaturer med en vanlig strengsammenligning, stopper ved det første tegnet som er ulikt. Ved å måle svartidene kan en angriper gjette en gyldig signatur ett tegn av gangen. Sammenligningen i dette verktøyet undersøker hver byte uansett resultat, slik en server bør gjøre med crypto.timingSafeEqual i Node.js, hmac.compare_digest i Python eller hash_equals i PHP.
Ofte stilte spørsmål
Hvorfor er HMAC-en min ulik den serveren min beregner?
Vanlige årsaker er en annen melding (serveren signerer det rå innholdet, mens du limte inn JSON som er formatert på nytt, eller linjeskiftene er ulike), en nøkkel i feil Nøkkelformat, eller en annen algoritme. Selv ett ekstra mellomrom endrer hele resultatet.
Bør utdata være hex eller Base64?
Begge koder de samme bytene. GitHub bruker hex, mens mange andre API-er, som Shopify, bruker Base64. Bruk formatet systemet som mottar, forventer.
Kan jeg bruke en tom nøkkel?
Verktøyet godtar det og advarer deg: med en tom nøkkel kan hvem som helst beregne den samme HMAC-en, så den beviser ingenting.
Er HMAC-SHA1 brutt slik SHA-1 er?
Kollisjonsangrepene mot SHA-1 knekker ikke HMAC-SHA1, som fortsatt regnes som sikker som MAC. Den støttes fortsatt for eldre systemer, som den gamle overskriften X-Hub-Signature, men nye systemer bør bruke HMAC-SHA256 eller sterkere.
Er den hemmelige nøkkelen min trygg her?
Nøkkelen og meldingen behandles bare i nettleseren din og sendes aldri noe sted. Behandle likevel en produksjonshemmelighet med forsiktighet, og bytt den ut hvis du tror den er avslørt.
Relaterte verktøy
- Hash-generator Lag MD5-, SHA-1-, SHA-256- og SHA-512-hasher av tekst eller filer i alle størrelser, og kontroller sjekksummer. Alt kjører i nettleseren din.
- JWT-dekoder Dekod header og payload i en JWT, les exp, iat og nbf som datoer, og verifiser HS256-, RS256-, PS256-, ES256- og EdDSA-signaturer lokalt i nettleseren din.
- Base64-koder og -dekoder Gratis Base64-koder og -dekoder med full UTF-8-støtte og valg for URL-trygg base64url. Kjører helt i nettleseren din, ingenting lastes opp.
- Bcrypt-generator og -kontroll Lag en bcrypt-hash med kostnadsfaktor fra 4 til 14, kontroller et passord mot en eksisterende hash og se versjon, kostnad, salt og hashverdi.