CodeKitHub
Kodningsværktøjer

HMAC-generator

Senest opdateret:

Dette værktøj beregner en HMAC (Hash-based Message Authentication Code) fra en hemmelig nøgle og en besked ved hjælp af SHA-1, SHA-256, SHA-384 eller SHA-512 som den underliggende hashfunktion. I modsætning til en almindelig hash kræver en HMAC en delt hemmelig nøgle, så den beviser, at beskeden kommer fra nogen, der har nøglen, og at den ikke er ændret undervejs — det er netop derfor API'er bruger HMAC til at signere anmodninger, og webhooks bruger dem til at verificere en afsender af en payload. Alt kører lokalt via din browsers indbyggede Web Crypto API; din hemmelige nøgle og besked sendes aldrig til en server.

HMAC-SHA1
HMAC-SHA256
HMAC-SHA384
HMAC-SHA512

Hvad er dette værktøj?

HMAC står for Hash-based Message Authentication Code. Den kombinerer en hemmelig nøgle med en besked og en standard hashfunktion (som SHA-256) for at producere et digest med fast længde. Alle med samme nøgle og besked vil beregne præcis samme HMAC — men uden nøglen er det beregningsmæssigt umuligt at producere en gyldig HMAC for en besked, selv hvis du kender den anvendte hashalgoritme.

Det er den centrale forskel fra en almindelig hash: en almindelig hash (MD5, SHA-256 osv.) tager kun beskeden som input, så alle kan beregne den, og den beviser intet om, hvem der har oprettet den. En HMAC tager beskeden *og* en hemmelig nøgle, så en gyldig HMAC beviser, at afsenderen besad hemmeligheden — det er en autentificeringsmekanisme, ikke bare en integritetskontrol.

HMAC er formelt standardiseret af NIST i FIPS 198-1 og defineret for internetprotokoller i IETF RFC 2104. Dette værktøj beregner HMAC'er ved hjælp af din browsers native Web Crypto API (`crypto.subtle.sign` med HMAC-algoritmen), som implementerer RFC 2104 korrekt frem for en håndlavet JavaScript-version.

Hvorfor bruge det?

  • Signer API-anmodninger, så den modtagende server kan verificere, at anmodningen kommer fra en indehaver af den delte hemmelighed og ikke er blevet manipuleret.
  • Verificer webhook-payloads (Stripe, GitHub, Shopify og lignende tjenester signerer alle webhook-bodies med HMAC-SHA256).
  • Generer autentificeringstokens eller engangskoder, der afhænger af en delt hemmelighed.
  • Sammenlign din egen HMAC-implementerings output med en kendt korrekt referenceværdi.
  • 100 % lokalt: din hemmelige nøgle og besked forlader aldrig browseren, så det er sikkert at teste rigtige hemmeligheder.

Sådan bruger du det

  1. Indtast din hemmelige nøgle i feltet "Hemmelig nøgle".
  2. Indtast den besked, du vil autentificere, i feltet "Besked".
  3. HMAC-SHA1-, HMAC-SHA256-, HMAC-SHA384- og HMAC-SHA512-resultaterne genereres øjeblikkeligt (marker "Output med store bogstaver", hvis dit målsystem forventer store bogstaver).
  4. Klik på "Kopiér" ved siden af den HMAC, du har brug for.

Eksempel

Input

Hemmelig nøgle: key
Besked: The quick brown fox jumps over the lazy dog

Output

HMAC-SHA256: f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8
HMAC-SHA1: de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9

Dette er en standard, offentliggjort testvektor: med nøglen "key" og præcis denne besked producerer HMAC-SHA256 og HMAC-SHA1 altid disse værdier i enhver korrekt implementering, så du kan verificere dette værktøjs output uafhængigt.

HMAC vs. almindelig hash: hvornår du har brug for en nøgle

Det afgørende spørgsmål er: skal du bevise, hvem der oprettede dette digest, eller bare at indholdet ikke er ændret? Hvis en offentlig kontrolsum er nok — verifikation af, at en downloadet fil matcher det, udgiveren har angivet, deduplikering af poster — fungerer en almindelig hash, og alle kan kontrollere den, uden nøgle. Hvis du skal bevise, at digestet kun kunne være produceret af nogen, der besidder en bestemt hemmelighed — autentificering af en API-kalder, tillid til en webhook-afsender — har du brug for HMAC, fordi en almindelig hash giver en angriber uden hemmelighed samme mulighed for at forfalske et gyldigt digest som den rigtige afsender.

Multi-algoritme hash-generator · JWT-dekoder · MD5-generator

Sammenligning af de fire HMAC-algoritmer

Alle fire bruger den samme HMAC-konstruktion fra RFC 2104, og adskiller sig kun i den underliggende hashfunktion og dermed i outputlængden.

AlgoritmeOutputstørrelseTypisk anvendelse
HMAC-SHA1160 bit (40 hex-tegn)Ældre API'er, ældre OAuth 1.0a-signaturer
HMAC-SHA256256 bit (64 hex-tegn)API-anmodningssignering, JWT HS256, webhook-verifikation
HMAC-SHA384384 bit (96 hex-tegn)Signaturer med højere sikkerhed, hvor længere output kræves
HMAC-SHA512512 bit (128 hex-tegn)Digests med maksimal længde til applikationer med høj sikkerhed

Almindelige anvendelsestilfælde

  • Signering af udgående API-anmodninger med en delt hemmelighed, så serveren kan verificere den kaldendes identitet.
  • Verifikation af indgående webhook-payloads (Stripe-Signature, GitHub X-Hub-Signature-256 og lignende headere bruger alle HMAC-SHA256).
  • Generering og validering af signaturdelen af en JWT signeret med HS256/HS384/HS512.
  • Test af, at din server- eller klientsides HMAC-implementering matcher det forventede output, før den udrulles.

Ofte stillede spørgsmål

Hvad er HMAC?

HMAC (Hash-based Message Authentication Code) kombinerer en hemmelig nøgle med en besked ved hjælp af en hashfunktion for at producere et digest, der beviser både beskedens integritet og afsenderens besiddelse af nøglen. Den er defineret i NIST FIPS 198-1 og IETF RFC 2104.

Hvad er forskellen mellem HMAC og en almindelig hash?

En almindelig hash (SHA-256, MD5 osv.) tager kun en besked som input — alle kan beregne den, så den beviser kun, at beskeden ikke er blevet ødelagt, ikke hvem der sendte den. En HMAC tager en besked plus en hemmelig nøgle: hvis du skal bevise, at en besked kommer fra nogen, der besidder en bestemt hemmelighed (en API-signatur, en webhook-afsender), har du brug for HMAC. Hvis du kun skal kontrollere, at en fil eller besked ikke er ændret, og ikke er interesseret i at bevise ophavsret, er en almindelig hash nok.

Sendes min hemmelige nøgle til en server?

Nej. Dette værktøj beregner HMAC'en fuldstændigt i din browser ved hjælp af Web Crypto API. Din nøgle og besked overføres aldrig nogen steder — du kan trygt teste rigtige produktionshemmeligheder.

Hvilken algoritme skal jeg bruge — SHA-1, SHA-256, SHA-384 eller SHA-512?

Brug HMAC-SHA256, medmindre et bestemt system kræver andet — det er de facto-standarden for API-signering (bruges af AWS, Stripe, GitHub-webhooks og de fleste moderne API'er) og tilbyder en stærk sikkerhedsmargin. HMAC-SHA1 er stadig almindelig i ældre systemer (som ældre OAuth 1.0a-implementeringer), men SHA-1's underliggende hash anses for svagere; HMAC-SHA384/512 bruges, hvor længere output eller ekstra sikkerhedsmargin specifikt kræves.

Er HMAC-SHA1 usikker, når almindelig SHA-1 er brudt?

Kollisionsangrebene fra 2017 brød SHA-1 som en almindelig hashfunktion, men HMAC-SHA1 anses stadig for kryptografisk sikker, fordi HMAC's sikkerhed ikke afhænger af kollisionsmodstand på samme måde. Alligevel bør du foretrække HMAC-SHA256 eller højere til nye systemer — der er ingen praktisk ulempe, og det undgår spørgsmålet helt.

Hvad er almindelige virkelige anvendelser af HMAC?

Signering af REST API-anmodninger, så en server kan verificere, at den, der kalder, besidder den delte API-hemmelighed; verificering af webhook-payloads fra tjenester som Stripe, GitHub og Shopify, så du ved, at en anmodning virkelig kommer fra dem og ikke er forfalsket; generering af tidsbaserede engangskoder (TOTP/HOTP) til tofaktorautentificering; og signering af JWT-tokens med algoritmerne HS256/HS384/HS512.

Relaterede værktøjer