Så här använder du det
- Ange den hemliga nyckeln och välj om den är vanlig text eller hexadecimala byte.
- Klistra in meddelandet, till exempel en webhook-payload precis som den togs emot.
- Välj den algoritm och utdatakodning som din tjänst använder; HMAC uppdateras medan du skriver.
- För att kontrollera en signatur klistrar du in den i verifieringsfältet och letar efter ”Match”.
Så fungerar det
HMAC (RFC 2104) kombinerar en hemlig nyckel med en hashfunktion för att skapa en signatur som endast någon med nyckeln kan skapa. Tjänster som webhooks och signerade API-anrop skickar en HMAC med varje meddelande så att mottagaren kan kontrollera att meddelandet är äkta och oförändrat.
Det här verktyget använder webbläsarens Web Crypto API (crypto.subtle.importKey och sign) och kontrolleras mot testvektorerna i RFC 4231 och RFC 2202. En textnyckel och meddelandet kodas som UTF-8. En hex-nyckel avkodas till råa byte; mellanslag, kolon och en inledande 0x ignoreras. HMAC-SHA-256 är det vanligaste valet; HMAC-SHA-1 anses fortfarande säkert som MAC men används främst av äldre API:er.
Om din signatur inte stämmer, kontrollera de detaljer som oftast skiljer sig: de exakta meddelandebytena (många webhook-leverantörer signerar den råa bodyn, inte omformaterad JSON), en tidsstämpel eller ett prefix som leverantören lägger till i den signerade strängen, om nyckeln används som text eller måste avkodas från hex eller Base64 först, och om den förväntade signaturen är hex eller Base64 och har ett prefix som “sha256=”, vilket du bör ta bort innan jämförelse.
Exempel
RFC 4231-testfall
Nyckel “Jefe” (text), meddelande “what do ya want for nothing?” och HMAC-SHA-256 ger 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843. Använd “Prova ett exempel” för att läsa in det.
Kontrollera en webhook-signatur
En leverantör skickar headern X-Signature: sha256=… med varje förfrågan. Klistra in den råa bodyn från förfrågan som meddelande, din webhook-hemlighet som nyckel, välj HMAC-SHA-256 och Hex, och klistra sedan in värdet efter “sha256=” i verifieringsfältet.
En hex-kodad nyckel
Vissa system utfärdar nycklar som hex-strängar, till exempel 0b0b0b…. Välj Hex som nyckelformat så att verktyget signerar med de avkodade byten; att behandla samma sträng som text ger ett helt annat resultat.
Vanliga frågor
Vad är skillnaden mellan en HMAC och en vanlig hash?
Vem som helst kan beräkna en vanlig hash som SHA-256 av ett meddelande. En HMAC beror också på en hemlig nyckel, så endast någon med nyckeln kan skapa eller kontrollera den. Det bevisar att meddelandet kommer från en nyckelinnehavare och inte har ändrats.
Varför stämmer inte min HMAC överens med den från min server?
Indatabyten skiljer sig nästan alltid åt: radbrytningar, blanktecken, JSON-nyckelordning, teckenkodning eller en nyckel som ska avkodas från hex eller Base64. Jämför också samma kodning (hex jämfört med Base64) och ta bort prefix som “sha256=”.
Skickas min hemliga nyckel någonstans?
Nej. Nyckeln och meddelandet används endast av Web Crypto API i den här webbläsarfliken. De laddas inte upp, lagras inte och ingår inte i analyser.
Är HMAC-SHA-1 fortfarande säkert?
SHA-1-kollisioner bryter inte HMAC-SHA-1 direkt, och HMAC-SHA-1 accepteras fortfarande av kompatibilitetsskäl. För nya system använd HMAC-SHA-256 eller starkare.
Integritet
Nyckeln, meddelandet och resultatet finns bara i den här webbläsarfliken. Inget laddas upp, lagras eller skickas till analysverktyg; endast en anonym händelse registreras om att verktyget användes.