tigtools

HMAC Generator

Beräkna en nyckelbaserad meddelandeautentiseringskod (HMAC) för ett meddelande och en hemlig nyckel, eller kontrollera en signatur du har tagit emot. Nyckeln och meddelandet stannar i din webbläsare.

Körs i din webbläsare Ingen registrering

Nyckeln och meddelandet bearbetas endast i den här webbläsarfliken och skickas aldrig någonstans. Undvik ändå att klistra in skarpa produktionshemligheter på en delad eller ej betrodd dator.
Nyckelformat

Signeras som UTF-8 exakt som det skrivs. Ett efterföljande mellanslag eller radbrytning ändrar resultatet.

Utdata

Klistra in en signatur i hex (valfritt skiftläge) eller Base64 för att jämföra den med resultatet ovan.

Så här använder du det

  1. Ange den hemliga nyckeln och välj om den är vanlig text eller hexadecimala byte.
  2. Klistra in meddelandet, till exempel en webhook-payload precis som den togs emot.
  3. Välj den algoritm och utdatakodning som din tjänst använder; HMAC uppdateras medan du skriver.
  4. 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.