HMAC-Generator & Signaturprüfer
Kostenloser HMAC-Generator und -Prüfer online. Berechne HMAC-SHA256/SHA1/SHA384/SHA512 mit Schlüsseln als Text, Hex oder Base64 und Ausgabe als Hex/Base64/Base64URL. 100 % in deinem Browser — Schlüssel verlassen nie die Seite.
Was ist ein HMAC?
Ein HMAC (Hash-based Message Authentication Code) ist ein kurzes Tag mit fester Länge, das beweist, dass eine Nachricht sowohl unverändert als auch authentisch ist — dass sie von jemandem erzeugt wurde, der einen gemeinsamen geheimen Schlüssel besitzt. In RFC 2104 und FIPS 198-1 definiert, kombiniert HMAC jede kryptografische Hash-Funktion mit einem geheimen Schlüssel in einer bestimmten geschachtelten Konstruktion, geschrieben als HMAC(K, m) = H((K ⊕ opad) ‖ H((K ⊕ ipad) ‖ m)). Der innere Hash bindet den Schlüssel an die Nachricht; der äußere Hash umschließt das Ergebnis, was HMAC widerstandsfähig gegen Längenerweiterungsangriffe macht, die die rohen SHA-1- und SHA-256-Funktionen betreffen.
HMAC ist überall in der modernen Web-Infrastruktur. Er signiert Webhooks, sodass du bestätigen kannst, dass eine eingehende Anfrage wirklich von GitHub, Stripe, Slack oder Twilio stammt und nicht gefälscht wurde. Er signiert API-Anfragen (AWS Signature Version 4 baut auf HMAC-SHA256 auf), sodass ein Server den Aufrufer authentifizieren kann, ohne ein Passwort über die Leitung zu senden. Er ist das S in HS256: Ein mit HS256 signiertes JWT trägt einen HMAC-SHA256 über seinen Header und seine Nutzlast, den du mit dem JWT-Kodierer untersuchen kannst. Er liegt auch der TLS-Schlüsselableitung (HKDF), den Einmalpasswort-Algorithmen (HOTP/TOTP) und der Nachrichtenintegrität in unzähligen internen Diensten zugrunde.
Dieses Tool berechnet HMAC vollständig in deinem Browser mit crypto.subtle.sign('HMAC', ...) aus der Web-Crypto-API — derselben Primitive, die Browser bei TLS-Handshakes verwenden. Dein geheimer Schlüssel und deine Nachricht werden nie hochgeladen, daher ist es sicher für produktive Signaturgeheimnisse. Da dasselbe Geheimnis als rohem Text, Hex oder Base64 ausgedrückt werden kann, lässt dich das Tool die Schlüsselkodierung explizit wählen, und da verschiedene Anbieter das Tag in unterschiedlichen Formen erwarten, kannst du es als Hex, Base64 oder Base64URL ausgeben. Der Tab Prüfen lässt dich eine empfangene Signatur kontrollieren, mithilfe eines Vergleichs in konstanter Zeit, sodass die Prüfung selbst keine Zeitinformationen preisgibt.
const crypto = require('crypto');
// HMAC-SHA256 with a UTF-8 text key, hex output
const hmac = crypto
.createHmac('sha256', 'my-secret-key')
.update('Hello, World!')
.digest('hex');
console.log(hmac);
// → 'cf3141611e22ea26a9cac6fe41d941274dd6653622c83cba13972d177bd69699'
// Verify a signature in constant time
function verify(message, key, expectedHex) {
const actual = crypto.createHmac('sha256', key).update(message).digest();
const expected = Buffer.from(expectedHex, 'hex');
return actual.length === expected.length &&
crypto.timingSafeEqual(actual, expected);
} Hauptfunktionen
Generieren und prüfen in einem Tool
Generiere eine Signatur im Tab Generieren oder füge einen erwarteten HMAC im Tab Prüfen ein, um einen eingehenden Webhook oder ein Token zu authentifizieren. Die Prüfung verwendet einen Vergleich in konstanter Zeit, sodass das Ergebnis nie Zeitinformationen preisgibt.
Die Schlüsselkodierung wählen
Interpretiere dein Geheimnis als Text (UTF-8), Hexadezimal oder Base64. Das ist die Einstellung, die die meisten anderen Tools auslassen — und der häufigste Grund, warum zwei Systeme für denselben Schlüssel unterschiedliche HMACs berechnen.
Drei Ausgabekodierungen
Gib das Tag als Hex (GitHub-Webhooks, AWS), Base64 (Stripe, Twilio, viele APIs) oder Base64URL (JWTs und URL-sichere Token) aus, damit es ohne manuelle Umwandlung zu deiner Integration passt.
Vier native Algorithmen
HMAC-SHA256 als Standard, dazu SHA-1, SHA-384 und SHA-512. Alle laufen über die Web-Crypto-API des Browsers, sodass es keiner JavaScript-Krypto-Bibliothek zu vertrauen gilt und keine Leistungseinbuße entsteht.
100 % clientseitig und privat
Dein geheimer Schlüssel und deine Nachricht werden vollständig in deinem Browser verarbeitet und nie an einen Server gesendet. Öffne den Netzwerk-Tab und du siehst null ausgehende Anfragen — sicher für produktive Signaturgeheimnisse.
Live-Berechnung
Der HMAC wird sofort neu berechnet, während du Nachricht, Schlüssel, Kodierung oder Algorithmus bearbeitest — kein Hin und Her über einen Generieren-Button, sodass du mit Kodierungen experimentieren kannst, bis dein Wert dem des Servers entspricht.
Auf geprüften Vektoren aufgebaut
Die Ausgabe wird gegen die offiziellen HMAC-Testvektoren aus RFC 4231 validiert, sodass du darauf vertrauen kannst, dass die Digests dem entsprechen, was OpenSSL, das crypto-Modul von Node und die hmac-Bibliothek von Python erzeugen.
HMAC-Beispiele
Schnellstart — HMAC-SHA256, Hex-Ausgabe
Hello, World!
cf3141611e22ea26a9cac6fe41d941274dd6653622c83cba13972d177bd69699
Mit dem Schlüssel „my-secret-key“ (Schlüsselkodierung = Text), dem Algorithmus HMAC-SHA256 und Ausgabeformat = Hex erzeugt die Nachricht „Hello, World!“ cf3141611e22ea26a9cac6fe41d941274dd6653622c83cba13972d177bd69699. Das ist der kanonische 64-stellige Hex-Digest, den du mit crypto.createHmac('sha256', key).update(msg).digest('hex') von Node erhältst.
Einen Webhook im Stripe-Stil prüfen (Base64-Ausgabe)
{"id":42,"event":"user.created"} Cd2f7zTKaJFeG6k+t1FcvDPn51OAZ2f4GrxkCUgMhGs=
Viele Webhook-Anbieter senden die Signatur als Base64. Mit dem Schlüssel „whsec_test_secret“ (Text), HMAC-SHA256 und Ausgabeformat = Base64 wird der JSON-Body zu Cd2f7zTKaJFeG6k+t1FcvDPn51OAZ2f4GrxkCUgMhGs= signiert. Füge diesen Wert in den Tab Prüfen ein, um zu bestätigen, dass die Anfrage wirklich von deinem Anbieter stammt, bevor du sie verarbeitest. Intern läuft HMAC über dieselbe Primitive wie unser SHA-256-Hash-Generator, jedoch mit deinem Geheimnis als Schlüssel.
RFC-4231-Referenzvektor
what do ya want for nothing?
5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843
Dies ist Testfall 2 aus RFC 4231, dem offiziellen Dokument der HMAC-Testvektoren. Mit dem Schlüssel „Jefe“ (Text), HMAC-SHA256 und Hex-Ausgabe ergibt die Nachricht „what do ya want for nothing?“ 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843. Diesen exakten Wert zu reproduzieren ist die Art, wie du nachweist, dass eine HMAC-Implementierung korrekt ist.
HMAC-SHA512 für einen längeren Digest
The quick brown fox
36f44b125a8a90639dc46733039571792e081e0fd8685ff746784b02ed14aa35629d562c7117cde4a701570551faa5a5e1b7ef1eb5c3bcd4cc1fdb8923fcf14e
Stelle den Algorithmus auf HMAC-SHA512 um, um einen 128-stelligen (512-Bit) Digest zu erhalten. Mit dem Schlüssel „key“ (Text) und Hex-Ausgabe erzeugt „The quick brown fox“ den Wert oben. SHA-512 ist auf den meisten 64-Bit-Systemen schneller als SHA-256 und liefert eine größere Ausgabe, wenngleich SHA-256 der Standard für Interoperabilität bleibt.
So generierst & prüfst du einen HMAC
- 1
Den Algorithmus wählen
Wähle HMAC-SHA256 (die Standardeinstellung und die richtige Wahl für nahezu alle Webhooks, APIs und JWTs) oder wechsle zu SHA-1, SHA-384 oder SHA-512, um einem System zu entsprechen, das es erfordert. Alle vier laufen nativ in deinem Browser über die Web-Crypto-API.
- 2
Den geheimen Schlüssel eingeben und seine Kodierung festlegen
Tippe oder füge deinen geheimen Schlüssel ein und stelle dann die Schlüsselkodierung passend dazu ein, wie der Server ihn interpretiert: Text (UTF-8) für eine einfache Zeichenkette, Hex für einen hexadezimalen Block oder Base64 für ein Base64-Geheimnis. Hier einen Fehler zu machen ist die häufigste Ursache für HMAC-Abweichungen, also probiere im Zweifel alle drei.
- 3
Die Nachricht eingeben
Füge die exakten Bytes ein, die du signieren willst — bei einem Webhook ist das der rohe Anfragetext, Byte für Byte, ohne Neuserialisierung oder Leerzeichenänderungen. Der HMAC wird live beim Bearbeiten neu berechnet, ohne dass etwas an einen Server gesendet wird.
- 4
Das Ausgabeformat wählen und kopieren
Wähle Hex (GitHub-Stil), Base64 (Stripe/AWS-Stil) oder Base64URL (JWT-Stil) passend zu dem, was deine Integration erwartet, und klicke dann auf Kopieren, um die Signatur zu übernehmen.
- 5
Eine vorhandene Signatur prüfen
Wechsle zum Tab Prüfen, füge den erwarteten HMAC aus einem Header oder Token ein, und das Tool bestätigt in konstanter Zeit, ob deine berechnete Signatur übereinstimmt — so kannst du eine Nutzlast authentifizieren, bevor du darauf reagierst.
Häufige HMAC-Fehler
Falsche Schlüsselkodierung (Ursache Nr. 1 für Abweichungen)
Dasselbe Geheimnis kann als roher UTF-8-Text, als Hex oder als Base64 gelesen werden — und jede Interpretation erzeugt völlig unterschiedliche Schlüssel-Bytes, sodass der HMAC nicht übereinstimmt, wenn dein Tool und der Server sich uneinig sind. Wenn ein Anbieter dir ein Hex- oder Base64-Geheimnis gibt, musst du es vor dem Signieren in Bytes dekodieren und nicht die Zeichenkette so wie sie ist signieren. Wenn eine Signatur die Prüfung nicht besteht, probiere zuerst den Schlüssel mit allen drei Schlüsselkodierungs-Optionen.
// Server stored a base64 secret but you sign the literal string
createHmac('sha256', 'c2VjcmV0LWtleQ==').update(msg) // Decode the base64 secret to raw bytes first
createHmac('sha256', Buffer.from('c2VjcmV0LWtleQ==', 'base64')).update(msg) Falsche Ausgabekodierung
Ein HMAC sind rohe Bytes; Hex, Base64 und Base64URL sind nur unterschiedliche Textkodierungen desselben Werts. Wenn der Server eine Base64-Signatur sendet und du sie mit deinem Hex-Digest vergleichst, werden sie nie übereinstimmen, obwohl die zugrunde liegenden Bytes identisch sind. Passe das Ausgabeformat an das an, was der Header oder das Token verwendet.
// Provider sends base64, you compare hex
expected = 'Cd2f7z...=' // base64
actual = digest('hex') // hex — never matches // Produce the same encoding the provider uses
actual = digest('base64') Neuserialisiertes JSON statt des rohen Bodys signieren
Webhook-Signaturen decken die exakten Bytes ab, die der Anbieter gesendet hat. Wenn du das JSON parst und neu stringifizierst, können sich Schlüsselreihenfolge, Abstände und Zahlenformatierung ändern, was die Bytes verändert und die Signatur zerstört. Signiere immer den rohen Anfragetext, der vor jeglichem Parsen erfasst wurde.
// Re-serialization changes the bytes body = JSON.stringify(JSON.parse(rawBody)) verify(hmac(body))
// Sign the raw bytes exactly as received verify(hmac(rawBody))
== statt eines Vergleichs in konstanter Zeit verwenden
Die empfangene Signatur mit == oder einfacher String-Gleichheit zu vergleichen gibt Zeitinformationen preis, weil der Vergleich beim ersten abweichenden Byte stoppt. Über viele Versuche kann ein Angreifer ein gültiges Tag rekonstruieren. Verwende bei der Prüfung immer eine Gleichheitsprüfung in konstanter Zeit.
if (received === computed) { /* trust */ } if (crypto.timingSafeEqual(receivedBuf, computedBuf)) { /* trust */ } Wofür HMAC verwendet wird
- Webhook-Signaturen prüfen
- Anbieter wie GitHub, Stripe, Slack und Twilio signieren jeden Webhook mit einem HMAC über den Anfragetext und einem Geheimnis, das nur du teilst. Berechne das Tag neu und vergleiche es mit dem Header (zum Beispiel X-Hub-Signature-256), um zu bestätigen, dass das Ereignis echt ist, bevor du darauf reagierst. Verwende den Tab Prüfen, um das ohne Wegwerf-Code zu erledigen.
- API-Anfragen signieren
- Authentifizierte APIs verlangen oft, dass der Client die Anfrage per HMAC signiert (Methode, Pfad, Zeitstempel, Body) mit einem gemeinsamen Geheimnis, statt das Geheimnis selbst zu senden. AWS Signature Version 4 ist das kanonische Beispiel. Dieses Tool lässt dich solche Signaturen Schritt für Schritt reproduzieren und debuggen.
- Nachrichtenintegrität garantieren
- Wenn du ein Token, ein Cookie oder eine Nachricht zwischen Diensten weitergibst, lässt das Anhängen eines HMAC den Empfänger jede Manipulation erkennen. Da das Tag von einem Geheimnis abhängt, kann ein Angreifer es nach dem Ändern der Daten nicht neu berechnen — anders als eine einfache Prüfsumme.
- Die JWT-HS256-Signierung verstehen
- Ein mit HS256 signiertes JWT ist einfach base64url(Header) + '.' + base64url(Nutzlast), signiert mit HMAC-SHA256, wobei das Ergebnis als Base64URL ausgegeben wird. Stelle hier den Algorithmus auf SHA-256 und die Ausgabe auf Base64URL, um genau zu sehen, wie diese Signatur erzeugt wird, und gleiche es dann im JWT-Kodierer ab.
- Eine nicht übereinstimmende Signatur debuggen
- Wenn dein HMAC nicht mit dem des Servers übereinstimmen will, ist dieses Tool der schnellste Weg, die Ursache einzugrenzen: Probiere den Schlüssel als Text, Hex und Base64, wechsle die Ausgabe zwischen Hex und Base64 und bestätige, dass du genau die rohen Bytes signierst — alles ohne erneutes Deployment.
Wie HMAC funktioniert
- RFC-2104-Konstruktion
- HMAC ist definiert als H((K ⊕ opad) ‖ H((K ⊕ ipad) ‖ m)), wobei ipad das wiederholte Byte 0x36 und opad das wiederholte 0x5c ist, beide bis zur Blockgröße des Hashes. Ein Schlüssel, der länger als die Blockgröße ist, wird zuerst gehasht; ein kürzerer Schlüssel wird mit Nullen aufgefüllt. Diese Zwei-Pass-Schachtelung verleiht HMAC seinen Sicherheitsbeweis, der selbst dann gilt, wenn der zugrunde liegende Hash nicht kollisionsresistent ist.
- Warum ein schlüsselbasierter Hash einen reinen Hash schlägt
- Ein reiner Hash beweist nur, dass Daten nicht versehentlich beschädigt wurden, denn jeder kann ihn für jede Nachricht neu berechnen — auch für eine manipulierte. HMAC mischt ein Geheimnis hinein, sodass nur Schlüsselinhaber ein gültiges Tag erzeugen können. Das verwandelt reine Integrität in Integrität plus Authentizität, also genau die Eigenschaft, die Webhooks und signierte Anfragen tatsächlich brauchen.
- Resistenz gegen Längenerweiterung
- Nacktes SHA-1, SHA-256 und SHA-512 sind Merkle–Damgård-Hashes, die anfällig für Längenerweiterung sind: Aus H(secret ‖ msg) kann ein Angreifer H(secret ‖ msg ‖ extra) berechnen, ohne das Geheimnis zu kennen. Naive „Secret-Prefix-MAC“-Schemata werden dadurch gebrochen. Der äußere Hash von HMAC neutralisiert den Angriff, was der Hauptgrund ist, HMAC zu verwenden, statt ein Geheimnis und eine Nachricht zusammen zu hashen.
- SHA-256 vs. SHA-512 wählen
- HMAC-SHA256 erzeugt ein 256-Bit-Tag (64 Hex-Zeichen) und ist der Standard für Interoperabilität — schnell, allgegenwärtig und überall unterstützt. HMAC-SHA512 erzeugt ein 512-Bit-Tag (128 Hex-Zeichen) und ist auf 64-Bit-CPUs oft schneller, weil SHA-512 64-Bit-Wörter verwendet. Wähle SHA-256, sofern keine Spezifikation oder kein Gegenstellen-System SHA-512 verlangt; beide sind für die Authentifizierung sicher.
- Web-Crypto-Implementierung
- Dieses Tool ruft crypto.subtle.importKey auf, um deinen Schlüssel zu laden (dekodiert aus Text, Hex oder Base64), und crypto.subtle.sign('HMAC', ...), um das Tag zu berechnen, und kodiert dann die rohen Bytes als Hex, Base64 oder Base64URL. Es ist dieselbe native, auditierte Implementierung, die der Browser für TLS verwendet, und läuft für mehr Geschwindigkeit außerhalb der JavaScript-Engine.
HMAC-Best-Practices
- Einen Schlüssel verwenden, der mindestens so lang wie die Hash-Ausgabe ist
- Verwende für HMAC-SHA256 ein Geheimnis von mindestens 32 zufälligen Bytes (256 Bit); für SHA-512 verwende 64. Ein kurzer oder entropiearmer Schlüssel ist das schwächste Glied. Generiere Schlüssel aus einer kryptografisch sicheren Zufallsquelle — niemals aus einem Passwort oder einer vorhersehbaren Zeichenkette.
- Tags immer in konstanter Zeit vergleichen
- Prüfe Signaturen mit einem Vergleich in konstanter Zeit (crypto.timingSafeEqual in Node, hmac.compare_digest in Python) statt mit == oder String-Gleichheit. Ein naiver Vergleich bricht beim ersten abweichenden Byte vorzeitig ab und gibt ein Timing preis, das einem Angreifer erlauben kann, ein gültiges Tag Byte für Byte zu rekonstruieren. Der Tab Prüfen dieses Tools vergleicht bereits in konstanter Zeit.
- Den geheimen Schlüssel niemals loggen oder offenlegen
- Halte Signaturgeheimnisse aus Logs, Fehlermeldungen, URLs und clientseitigem Code heraus. Speichere sie in einem Secrets-Manager oder in Umgebungsvariablen, rotiere sie regelmäßig und gib jeder Integration ihren eigenen Schlüssel, damit ein Leck nicht alles kompromittiert.
- HMAC-SHA256 oder stärker bevorzugen
- Verwende standardmäßig HMAC-SHA256; steige auf SHA-384 oder SHA-512 um, wenn eine Gegenstelle es verlangt. Vermeide HMAC-SHA1 für neue Systeme und verwende niemals HMAC-MD5. Auch wenn HMAC einen schwächeren Hash besser verträgt als eine rohe Signatur, gibt dir ein moderner Hash als Ausgangspunkt den größten Spielraum.
- Die exakten Bytes signieren, samt Zeitstempel
- Signiere die rohe, unveränderte Nutzlast — das Neuserialisieren von JSON oder Trimmen von Leerzeichen ändert die Bytes und zerstört die Prüfung. Nimm beim Signieren von Anfragen einen Zeitstempel oder Nonce in die signierten Daten auf und weise veraltete Signaturen zurück, um Replay-Angriffe zu verhindern.
HMAC-FAQ
Was ist HMAC?
Wie unterscheidet sich HMAC von einem reinen Hash wie SHA-256?
Wie prüfe ich eine eingehende Webhook-Signatur?
Welche Schlüssel- und Ausgabekodierung verwendet mein Server?
Ist HMAC-SHA256 sicher?
Warum gibt es hier kein HMAC-MD5 oder HMAC-SHA-3?
HS256 (HMAC) vs. RS256 (RSA) — was sollte ich für JWTs verwenden?
Verwandte Werkzeuge
Alle Werkzeuge anzeigen →Bcrypt-Hash-Generator & Verifizierer
Sicherheitswerkzeuge
Bcrypt-Passwort-Hashes online erzeugen und prüfen — einstellbarer Kostenfaktor, $2b$/$2a$/$2y$. 100 % im Browser; dein Passwort wird nie hochgeladen.
JWT-Dekodierer
Sicherheitswerkzeuge
Dekodieren Sie JWT-Token online mit unserem kostenlosen JWT-Dekodierer. Inspizieren Sie sofort Header, Payload, Signatur, Ablauf und Claims. 100 % Browser — Ihr Token verlässt niemals Ihr Gerät. Keine Anmeldung, kein Tracking.
JWT-Kodierer & -Generator
Sicherheitswerkzeuge
Kostenloser Online-JWT-Generator & -Kodierer. Erstellen Sie Header und Payload und signieren Sie sofort mit HS256, RS256 oder ES256. 100 % im Browser — Ihr Geheimnis und Ihr Schlüssel verlassen niemals Ihr Gerät.
JWT-Secret-Generator — HS256/384/512
Sicherheitswerkzeuge
Erzeuge ein starkes, RFC-konformes JWT-Secret für HS256/384/512 — 100 % im Browser, nie an einen Server gesendet. base64url, base64 oder hex; für .env kopieren.
MD5-Hash-Generator & Datei-Prüfsummen-Tool
Sicherheitswerkzeuge
MD5-, SHA-256-, SHA-1- & SHA-512-Hashes online kostenlos generieren. Text oder Dateien im Browser hashen, Prüfsummen verifizieren und Ergebnisse kopieren. Ohne Anmeldung.
Zufallspasswort-Generator — Anpassbar, Stark & Sicher
Sicherheitswerkzeuge
Starke Zufallspasswörter sofort generieren — kostenlos, ohne Anmeldung, 100 % im Browser. Länge & Zeichentypen anpassen, bis zu 50 auf einmal. Stärkeanzeige mit Entropie-Analyse.