tigtools

HMAC Generator

Beregn en nøglebaseret meddelelsesautentificeringskode (HMAC) for en besked og hemmelig nøgle, eller kontrollér en modtaget signatur. Nøglen og beskeden forbliver i din browser.

Kører i din browser Ingen tilmelding

Nøglen og beskeden behandles kun i denne browserfane og sendes aldrig nogen steder hen. Undgå dog at indsætte aktuelle produktionshemmeligheder på en fælles eller ikke-pålidelig computer.
Nøgleformat

Signeres som UTF-8 præcis som skrevet. Et efterstillet mellemrum eller linjeskift ændrer resultatet.

Output

Indsæt en signatur i hex (store eller små bogstaver) eller Base64 for at sammenligne den med resultatet ovenfor.

Sådan bruger du det

  1. Indtast den hemmelige nøgle, og vælg om den er almindelig tekst eller hex-bytes.
  2. Indsæt beskeden, for eksempel en webhook-payload præcis som modtaget.
  3. Vælg den algoritme og output-kodning, din tjeneste bruger; HMAC'en opdateres, mens du skriver.
  4. For at kontrollere en signatur skal du indsætte den i verificeringsfeltet og se efter “Match”.

Sådan fungerer det

HMAC (RFC 2104) kombinerer en hemmelig nøgle med en hashfunktion for at lave en signatur, som kun personer med nøglen kan oprette. Tjenester som webhooks og signerede API-anmodninger sender en HMAC med hver besked, så modtageren kan kontrollere, at beskeden er ægte og uændret.

Dette værktøj bruger din browsers Web Crypto API (crypto.subtle.importKey og sign) og kontrolleres mod testvektorerne fra RFC 4231 og RFC 2202. En tekstnøgle og beskeden kodes som UTF-8. En hex-nøgle afkodes til rå bytes; mellemrum, kolontegn og et indledende 0x ignoreres. HMAC-SHA-256 er det mest almindelige valg; HMAC-SHA-1 betragtes stadig som sikker som MAC, men bruges primært af ældre API'er.

Hvis din signatur ikke matcher, så kontrollér de detaljer, der oftest afviger: de nøjagtige beskedbytes (mange webhook-udbydere signerer den rå body, ikke omformateret JSON), et tidsstempel eller præfiks som udbyderen føjer til den signerede streng, om nøglen bruges som tekst eller først skal afkodes fra hex eller Base64, og om den forventede signatur er hex eller Base64 og har et præfiks som “sha256=”, som du skal fjerne før sammenligning.

Eksempler

RFC 4231-testtilfælde

Nøgle “Jefe” (tekst), besked “what do ya want for nothing?” og HMAC-SHA-256 giver 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843. Brug “Prøv et eksempel” for at indlæse det.

Kontrol af en webhook-signatur

En udbyder sender headeren X-Signature: sha256=… med hver anmodning. Indsæt den rå anmodningsbody som besked, din webhook-hemmelighed som nøgle, vælg HMAC-SHA-256 og Hex, og indsæt derefter værdien efter “sha256=” i verificeringsfeltet.

En hex-kodet nøgle

Nogle systemer udsteder nøgler som hex-strenge såsom 0b0b0b…. Vælg Hex som nøgleformat, så værktøjet signerer med de afkodede bytes; hvis du behandler den samme streng som tekst, får du et helt andet resultat.

Ofte stillede spørgsmål

Hvad er forskellen mellem en HMAC og en almindelig hash?

Enhver kan beregne en almindelig hash som SHA-256 af en besked. En HMAC afhænger også af en hemmelig nøgle, så kun personer med nøglen kan oprette eller kontrollere den. Det beviser, at beskeden kommer fra en nøgleindehaver og ikke er blevet ændret.

Hvorfor matcher min HMAC ikke den fra min server?

Inputbytene afviger næsten altid: linjeskift, mellemrum, JSON-nøglernes rækkefølge, tegnkodning eller en nøgle, der skal afkodes fra hex eller Base64. Sammenlign også den samme kodning (hex kontra Base64), og fjern præfikser som “sha256=”.

Sendes min hemmelige nøgle nogen steder?

Nej. Nøglen og beskeden bruges kun af Web Crypto API i denne browserfane. De uploades ikke, gemmes ikke og indgår ikke i analyse.

Er HMAC-SHA-1 stadig sikkert?

SHA-1-kollisioner bryder ikke HMAC-SHA-1 direkte, og det accepteres stadig af kompatibilitetshensyn. Til nye systemer skal du bruge HMAC-SHA-256 eller stærkere.

Privatliv

Nøglen, beskeden og resultatet findes kun i denne browserfane. Intet uploades, gemmes eller sendes til analyse; kun en anonym hændelse om, at værktøjet blev brugt, registreres.