HMAC Generator

Generera HMAC-signaturer med SHA-256, SHA-384 eller SHA-512

Algoritm

Meddelande

Körs lokalt · Säkert att klistra in hemligheter

Hemlig nyckel

Körs lokalt · Säkert att klistra in hemligheter

HMAC-signatur

HMAC-signaturen visas här…

Vad är HMAC?

HMAC (Hash-based Message Authentication Code) är en kryptografisk konstruktion definierad i RFC 2104 som kombinerar en hashfunktion med en hemlig nyckel för att producera en autentiseringstagg av fast storlek. Till skillnad från en vanlig hash, som vem som helst kan beräkna, kan ett HMAC bara genereras och verifieras av parter som delar den hemliga nyckeln. HMAC är standardmekanismen för att verifiera både integritet och äkthet hos ett meddelande — det bekräftar att data inte har ändrats och att det producerats av en betrodd avsändare.

HMAC-algoritmen fungerar med vilken iterativ hashfunktion som helst: SHA-256, SHA-384, SHA-512 och även äldre funktioner som SHA-1 eller MD5. Den resulterande konstruktionen refereras till med dess underliggande hash — HMAC-SHA256, HMAC-SHA384 eller HMAC-SHA512. Eftersom HMAC:s säkerhetsbevis förlitar sig på att hashfunktionen är kollisionsresistent och har vissa pseudoslumpmässiga egenskaper är SHA-2-familjen det rekommenderade valet för nya system. HMAC-SHA256 är den mest utbredda varianten och används i AWS Signature V4, Stripe-webhooks, GitHubs webhook-hemligheter, Slacks begäransignering och JSON Web Tokens (HS256).

HMAC:s design ger en kritisk egenskap som vanlig hashning saknar: motstånd mot längdutvidgningsattacker. Med SHA-256 ensamt kan en angripare som känner till H(meddelande) beräkna H(meddelande || angripardata) utan att känna till det ursprungliga meddelandet. HMAC:s dubbelhasningsstruktur (inre hash och yttre hash med olika vadderade nycklar) förhindrar den här attacken helt. Det är därför API-signeringsscheman använder HMAC i stället för att lägga till en hemlig nyckel till meddelandet och hasha resultatet.

Varför använda en online HMAC-generator?

Att beräkna HMAC-signaturer kräver normalt att man skriver kod eller använder CLI-verktyg. Den här webbläsarbaserade HMAC-generatorn låter dig skapa HMAC-SHA256-, HMAC-SHA384- och HMAC-SHA512-signaturer direkt utan att installera programvara eller byta till en terminal.

Omedelbar HMAC-beräkning
Ange ditt meddelande och din hemliga nyckel, välj hashalgoritm och få HMAC-signaturen direkt. Web Crypto API hanterar beräkningen internt i din webbläsare.
🔒
Integritetsfokuserad bearbetning
Ditt meddelande och din hemliga nyckel lämnar aldrig din enhet. All HMAC-beräkning körs lokalt via Web Crypto API — inga serveranrop, ingen loggning, ingen datalagring.
📋
Stöd för flera algoritmer
Växla mellan HMAC-SHA256, HMAC-SHA384 och HMAC-SHA512 med ett klick. Jämför utdata mellan algoritmer för att verifiera att din backend-implementering stämmer.
🔍
Inget konto eller installation
Fungerar i alla moderna webbläsare — Chrome, Firefox, Safari, Edge. Ingen registrering, inget tillägg, ingen CLI-konfiguration. Öppna sidan och börja generera HMAC-signaturer.

Användningsfall för HMAC-generatorn

Frontendutvecklare — Verifiering av webhook-signaturer
Stripe, GitHub och Shopify signerar webhook-nyttolaster med HMAC-SHA256. Använd det här verktyget för att beräkna den förväntade signaturen från en nyttolast och en hemlighet, och jämför sedan med signaturen i HTTP-headern under utveckling.
Backendutvecklare — Signering av API-förfrågningar
AWS Signature V4 kräver HMAC-SHA256 i flera steg av signeringsprocessen. Generera referens-HMAC-värden under utveckling för att felsöka signeringsmissmatchningar och verifiera mellanliggande beräkningssteg.
DevOps — Validering vid nyckelrotation
När du roterar webhook-hemligheter eller API-signeringsnycklar, beräkna HMAC-signaturer med både den gamla och nya nyckeln för att bekräfta att din applikation hanterar övergången korrekt innan den gamla nyckeln upphör.
QA-ingenjör — Signaturtestvektorer
Generera HMAC-testvektorer med kända indata och nycklar för att bygga regressionstester för din autentiseringsmiddleware. Verifiera att din implementering hanterar tomma meddelanden, Unicode-indata och långa nycklar korrekt.
Datatekniker — Meddelandeautentisering i pipelines
Bifoga HMAC-signaturer till meddelanden i händelsedrivna pipelines (Kafka, SQS) för att verifiera att meddelanden inte har manipulerats under transport mellan tjänster.
Studerande — Kryptografikursarbete
Experimentera med HMAC för att förstå hur ett enda ändrat tecken i meddelandet eller nyckeln ger en helt annorlunda signatur. Jämför HMAC-utdata med vanlig SHA-256-utdata för att observera skillnaden som en hemlig nyckel introducerar.

HMAC vs vanlig hash vs kryptering

HMAC, vanlig hashning och kryptering tjänar olika syften. HMAC ger meddelandeautentisering — bevis på att meddelandet skapades av någon med den hemliga nyckeln och inte har ändrats. En vanlig hash ger integritet men inte autentisering. Kryptering ger konfidentialitet. Tabellen nedan klargör skillnaderna.

EgenskapHMACPlain HashEncryption
PurposeMessage authentication + integrityData integrity only (no key)Confidentiality + integrity
Requires secret keyYesNoYes
Verifiable byParties who share the secretAnyoneRecipient with key
ReversibleNo — digest onlyNo — digest onlyYes — decryption recovers data
Output sizeDepends on hash (e.g. 256 bits)Depends on hashVariable (ciphertext)
StandardRFC 2104FIPS 180-4NIST SP 800-38A (AES)
Use case exampleWebhook signature verificationFile checksum verificationEncrypting data at rest

Jämförelse av HMAC-algoritmer

HMAC kan använda vilken hashfunktion som helst, men valet av underliggande algoritm avgör utdatastorleken, säkerhetsnivån och webbläsarkompatibiliteten. HMAC-SHA256 är det vanligaste valet för nya system. Tabellen nedan jämför de varianter du troligtvis kommer att stöta på.

AlgoritmSammandragsstorlekHexlängdWeb Crypto APIBäst för
HMAC-SHA256256 bits64 hex charsYesAPI signing, webhooks, JWT (HS256)
HMAC-SHA384384 bits96 hex charsYesTLS 1.3 PRF, CNSA compliance
HMAC-SHA512512 bits128 hex charsYesHigh-security signatures, HKDF
HMAC-SHA1160 bits40 hex charsYesLegacy OAuth 1.0, TOTP (RFC 6238)
HMAC-MD5128 bits32 hex charsNoLegacy only — not recommended

Hur HMAC fungerar internt

HMAC tillämpar den underliggande hashfunktionen två gånger med två olika nyckelbaserade vadderings. Konstruktionen är definierad i RFC 2104 och bevisad vara en PRF (pseudoslumpmässig funktion) under standard kryptografiska antaganden. Nyckeln vadderas först eller hashas för att matcha hashfunktionens blockstorlek (64 byte för SHA-256, 128 byte för SHA-512).

HMAC(K, m) = H((K' ⊕ opad) || H((K' ⊕ ipad) || m))
where K' = key padded to block size, ipad = 0x36, opad = 0x5C

Algoritmen XOR:ar den vadderade nyckeln med en inre vadderingskonstant (ipad, 0x36 upprepat), sammanfogar den med meddelandet och hashar resultatet. Den XOR:ar sedan den vadderade nyckeln med en yttre vadderingskonstant (opad, 0x5C upprepat), sammanfogar med det inre hashvärdet och hashar igen. Den här dubbelhasningsstrukturen är det som förhindrar längdutvidgningsattacker och säkerställer att HMAC-utdata inte kan beräknas utan kännedom om den hemliga nyckeln.

HMAC-kodexempel

HMAC stöds internt i alla större språk och körtidsmiljöer. Web Crypto API tillhandahåller HMAC-SHA256, HMAC-SHA384 och HMAC-SHA512 i webbläsare utan något bibliotek. Exemplen nedan visar verkliga användningsmönster inklusive webhook-verifiering och jämförelse med konstant tidskomplexitet.

JavaScript (Web Crypto API)
async function hmacSHA256(message, secret) {
  const enc = new TextEncoder()
  const key = await crypto.subtle.importKey(
    'raw', enc.encode(secret),
    { name: 'HMAC', hash: 'SHA-256' },
    false, ['sign']
  )
  const sig = await crypto.subtle.sign('HMAC', key, enc.encode(message))
  return Array.from(new Uint8Array(sig))
    .map(b => b.toString(16).padStart(2, '0')).join('')
}

await hmacSHA256('hello world', 'my-secret-key')
// → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"

// Node.js (built-in crypto module)
const crypto = require('crypto')
crypto.createHmac('sha256', 'my-secret-key')
  .update('hello world').digest('hex')
// → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"
Python
import hmac
import hashlib

# HMAC-SHA256
sig = hmac.new(
    b'my-secret-key',
    b'hello world',
    hashlib.sha256
).hexdigest()
print(sig)
# → "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"

# Verify a webhook signature (constant-time comparison)
expected = "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad"
received = hmac.new(b'my-secret-key', b'hello world', hashlib.sha256).hexdigest()
if hmac.compare_digest(expected, received):
    print("Signature valid")

# HMAC-SHA512
hmac.new(b'key', b'data', hashlib.sha512).hexdigest()
Go
package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "fmt"
)

func main() {
    mac := hmac.New(sha256.New, []byte("my-secret-key"))
    mac.Write([]byte("hello world"))
    sig := mac.Sum(nil)
    fmt.Printf("%x\n", sig)
    // → 90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad

    // Verify: use hmac.Equal for constant-time comparison
    expected := mac.Sum(nil)
    fmt.Println(hmac.Equal(sig, expected)) // true
}
CLI (OpenSSL)
# HMAC-SHA256
echo -n "hello world" | openssl dgst -sha256 -hmac "my-secret-key"
# → SHA2-256(stdin)= 90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad

# HMAC-SHA512
echo -n "hello world" | openssl dgst -sha512 -hmac "my-secret-key"

# Verify a file signature
openssl dgst -sha256 -hmac "my-secret-key" release.tar.gz

# HMAC with hex key (e.g. from a webhook secret)
echo -n "payload" | openssl dgst -sha256 -hmac "$(echo -n '736563726574' | xxd -r -p)"

Vanliga frågor

Vad är skillnaden mellan HMAC och en vanlig hash?
En vanlig hash (SHA-256, MD5) tar bara ett meddelande som indata och producerar ett sammandrag som vem som helst kan beräkna. HMAC tar både ett meddelande och en hemlig nyckel och producerar en signatur som bara någon med nyckeln kan generera eller verifiera. Det innebär att HMAC ger autentisering (bevis på avsändarens identitet) utöver integritetskontroll. En vanlig hash bevisar bara att data inte har förändrats, inte vem som producerade det.
Är HMAC-SHA256 säkert?
Ja. HMAC-SHA256 anses säkert per 2026. Säkerheten bygger på SHA-256:s pseudoslumpmässiga egenskaper och HMAC-konstruktionen i sig (RFC 2104). Ingen praktisk attack mot HMAC-SHA256 har demonstrerats. Även HMAC-MD5 och HMAC-SHA1 är säkra i praktiken eftersom HMAC:s säkerhet inte kräver fullständig kollisionsresistans hos den underliggande hashen, men SHA-2-varianter rekommenderas för nya system.
Varför använder webhooks HMAC i stället för att kryptera nyttolasterna?
Webhook-nyttolaster innehåller typiskt data som mottagaren redan förväntar sig — orderdetaljer, händelsenotifieringar, statusuppdateringar. Målet är inte att dölja data (konfidentialitet) utan att bevisa att det kom från den legitima avsändaren och inte ändrades under transport (äkthet och integritet). HMAC uppnår detta med minimal overhead: avsändaren beräknar ett HMAC av nyttolasterna med en delad hemlighet och inkluderar det i en HTTP-header. Mottagaren beräknar om HMAC och jämför. Kryptering skulle lägga till onödig komplexitet och nyckelhanteringsbörda.
Hur bör jag jämföra HMAC-signaturer på ett säkert sätt?
Använd alltid en jämförelsefunktion med konstant tidskomplexitet. I Python, använd hmac.compare_digest(). I Node.js, använd crypto.timingSafeEqual(). I Go, använd hmac.Equal(). Vanliga strängjämförelseoperatorer (== eller ===) kan läcka timinginformation: en angripare kan mäta hur lång tid jämförelsen tar för att avgöra hur många byte av deras förfalskade signatur som stämmer med den korrekta, och sedan brute-forcera de återstående bytena ett i taget.
Kan HMAC vändas om för att återfå den hemliga nyckeln?
Nej. HMAC baseras på en envägshashfunktion, så det finns ingen matematisk genväg för att extrahera nyckeln från ett HMAC-värde. En angripare skulle behöva brute-forca nyckelutrymmet, vilket är omöjligt för nycklar på 128 bitar eller längre. Svaga eller korta nycklar (som enkla lösenord) kan dock vara sårbara för ordlisteattacker, så använd alltid kryptografiskt slumpmässiga nycklar på minst 256 bitar för HMAC-SHA256.
Vad händer om HMAC-nyckeln är längre än hashens blockstorlek?
Om den hemliga nyckeln är längre än hashfunktionens blockstorlek (64 byte för SHA-256, 128 byte för SHA-512) hashar HMAC-algoritmen först nyckeln med den underliggande hashfunktionen för att reducera den till hashutdatalängden, och använder sedan den hashen som effektiv nyckel. Det innebär att mycket långa nycklar inte ger ytterligare säkerhet utöver hashutdatastorleken. För HMAC-SHA256 hashas nycklar längre än 64 byte ned till 32 byte och ger ingen säkerhetsförbättring jämfört med en 64-byte nyckel; nycklar upp till 64 byte används i sin fulla längd.
När bör jag använda HMAC-SHA512 i stället för HMAC-SHA256?
Använd HMAC-SHA512 när protokollet kräver det (vissa nyckelderivationsfunktioner som HKDF-SHA512, Ed25519-nyckelgenerering), när du behöver en bredare signatur för djupgående försvar, eller när du kör på 64-bitars hårdvara där SHA-512 faktiskt är snabbare än SHA-256. För de flesta webbapplikationer, API-signering och webhook-verifiering ger HMAC-SHA256 tillräcklig säkerhet och är det vanligare valet i ekosystemen.