Zum Hauptinhalt springen
Bethemesh

HMAC-Generator und -Prüfer

Berechne das HMAC einer Nachricht mit einem geheimen Schlüssel, in Hex oder Base64, und vergleiche es mit einer erwarteten Signatur (Präfix sha256= wird akzeptiert), um einen GitHub-, Stripe- oder Shopify-Webhook zu prüfen.

  • Zwischenablage

Dieses Widget einbetten

Passe die Darstellung an, prüfe die Vorschau und kopiere anschließend den Code.

Vorschau

Art des Einbettungscodes

Zu kopierender Code

Responsive und automatisch von Bethemesh in der Größe angepasst.

HMAC-Signatur

Hexadezimal oder Base64, mit oder ohne Präfix wie sha256=.

War dieses Werkzeug hilfreich?

Wie funktioniert dieses Tool?

Dieses Tool berechnet das HMAC einer Nachricht mit einem geheimen Schlüssel, mit SHA-1, SHA-256, SHA-384 oder SHA-512, und vergleicht es mit einer erwarteten Signatur. Es richtet sich vor allem an Entwickler, die Webhooks von GitHub, Stripe oder Shopify einbinden oder debuggen und wissen wollen, ob ein Fehler am Secret, am Nachrichten-Body oder am eigenen Code liegt.

Ein HMAC (RFC 2104, FIPS 198-1) kombiniert eine Hashfunktion mit einem geheimen Schlüssel: HMAC(K, m) = H((K ⊕ opad) ‖ H((K ⊕ ipad) ‖ m)). Dieser doppelte Durchlauf macht es unmöglich, den Wert ohne Schlüssel zu erzeugen, und verhindert den Length-Extension-Angriff, der ein einfaches SHA-256(Schlüssel ‖ Nachricht) trifft. Mit dem Schlüssel „key“ und der Nachricht „Franz jagt im komplett verwahrlosten Taxi quer durch Bayern“ ergibt HMAC-SHA-256 6a764052c9893892621c72191ed1d5f67e1838836764ebd7a19d33e5ee8b620c in Hex bzw. anZAUsmJOJJiHHIZHtHV9n4YOINnZOvXoZ0z5e6LYgw= in Base64. Der Schlüssel wird so verwendet, wie du ihn eingibst, Nachricht und Schlüssel werden als UTF-8 kodiert, und die Berechnung läuft über die Web Crypto API des Browsers.

Die meisten Anbieter signieren den rohen Request-Body. GitHub sendet X-Hub-Signature-256: sha256=<hex>, Shopify sendet X-Shopify-Hmac-Sha256 in Base64, und Stripe signiert den String „Zeitstempel.Body“ und setzt den Hex-Wert hinter v1= in den Header Stripe-Signature. Wähle also je nach Anbieter die Ausgabe in Hex oder Base64 und füge die erhaltene Signatur in das optionale Feld ein: Präfixe wie „sha256=“ werden akzeptiert, und das Ergebnis aktualisiert sich bei jeder Eingabe. Der Vergleich läuft in konstanter Zeit, wie GitHub es für Servercode empfiehlt.

So verwenden Sie dieses Tool

  1. Nachricht und Schlüssel eingeben

    Füge die exakte zu signierende Nachricht ein, etwa den rohen Body eines Webhooks, und danach den gemeinsamen geheimen Schlüssel.

  2. Algorithmus und Format wählen

    Wähle SHA-1, SHA-256, SHA-384 oder SHA-512 und die Ausgabe in Hex oder Base64, je nachdem, was der Dienst erwartet.

  3. Mit der erhaltenen Signatur vergleichen

    Füge bei Bedarf die erwartete Signatur ein, mit oder ohne Präfix wie sha256=: HMAC und Prüfergebnis aktualisieren sich während der Eingabe.

HMAC-Authentifizierung

HMAC-Authentifizierung

HMAC(Schlüssel K, Nachricht m) = H((K' XOR opad) || H((K' XOR ipad) || m)), wobei K' der auf die Blockgröße gebrachte Schlüssel ist

Anwendungsfälle

Einen GitHub-Webhook prüfen

Kopiere den rohen Payload und den Header X-Hub-Signature-256 aus dem Tab Recent Deliveries des Webhooks, gib das Secret ein und vergleiche. Stimmt der Wert hier, aber nicht auf deinem Server, verändert dein Framework den Body vor der Prüfung.

Eine Stripe-Signatur debuggen

Setze den signierten String „t.Body“ aus dem Header Stripe-Signature und dem rohen Body zusammen, berechne das HMAC-SHA-256 mit deinem whsec_…-Secret und vergleiche es mit dem v1-Wert, um die Ursache eines Prüffehlers einzugrenzen.

Einen Shopify-Webhook kontrollieren

Shopify signiert den rohen Body mit HMAC-SHA-256 und sendet das Ergebnis in Base64 im Header X-Shopify-Hmac-Sha256. Wähle die Base64-Ausgabe und füge den Header ein, um zu bestätigen, dass du das richtige App-Secret nutzt.

Beispiele

HMAC-SHA256-Referenzsignatur

Eingabe

Nachricht: The quick brown fox jumps over the lazy dog; Geheimer Schlüssel: key; Algorithmus: SHA-256; Kodierung: Hexadezimal

Ergebnis

Berechnete Signatur: f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8

Tipps und bewährte Vorgehensweisen

  • Signiere den rohen Body genau so, wie er empfangen wurde: Neu formatiertes, neu eingerücktes oder umsortiertes JSON ergibt eine völlig andere Signatur.
  • Achte auf unsichtbare Leerzeichen und Zeilenumbrüche rund um das Secret: Ein mit abschließendem Zeilenumbruch kopierter Schlüssel ergibt ein anderes HMAC.
  • Vergleiche auf dem Server immer mit einer Funktion in konstanter Zeit (crypto.timingSafeEqual, hmac.compare_digest) und lehne bei Stripe oder Slack zu alte Zeitstempel ab, um Replay-Angriffe zu blockieren.

Quellen und Referenzen

Häufig gestellte Fragen

Was ist der Unterschied zwischen HMAC und Hash?

Einen Hash wie SHA-256 kann jeder berechnen: Er belegt die Integrität, nicht die Herkunft. Ein HMAC fügt einen geheimen Schlüssel hinzu, sodass nur, wer diesen Schlüssel hat, den richtigen Wert erzeugen kann. Damit authentifiziert es den Absender und erkennt zugleich jede Änderung.

Warum stimmt meine Webhook-Signatur nicht überein?

Meist wurde der Body vor der Berechnung verändert: JSON vom Framework geparst und neu serialisiert, andere Kodierung oder zusätzliche Leerzeichen. Weitere häufige Ursachen sind ein falsches Secret (Test statt Produktion), ein falsches Ausgabeformat (Hex statt Base64) oder bei Stripe der vergessene Zeitstempel im signierten String.

Ist HMAC-SHA-1 noch sicher?

Zur Nachrichtenauthentifizierung ja: SHA-1-Kollisionen erlauben es nicht, ein HMAC-SHA-1 ohne Schlüssel zu fälschen, und es wird weiterhin genutzt, zum Beispiel von TOTP. Für neue Systeme solltest du trotzdem HMAC-SHA-256 nehmen, inzwischen der Standard für Webhooks. GitHub behält den SHA-1-Header X-Hub-Signature nur aus Kompatibilitätsgründen.

Wie lang sollte der Schlüssel sein?

RFC 2104 empfiehlt einen Schlüssel, der mindestens so lang ist wie die Hash-Ausgabe, also 32 Byte für HMAC-SHA-256. Ein Schlüssel, der länger als die Blockgröße ist (64 Byte bei SHA-256), wird zuerst gehasht und bringt daher keine zusätzliche Sicherheit. Erzeuge ihn zufällig, statt ein Passwort zu wählen.

Kann man ein HMAC entschlüsseln, um die Nachricht zurückzubekommen?

Nein, ein HMAC ist keine Verschlüsselung: Es enthält die Nachricht nicht und erlaubt nicht, sie zu rekonstruieren. Die Nachricht wird meist ohnehin im Klartext neben der Signatur gesendet. Um Inhalte unlesbar zu machen, brauchst du eine Verschlüsselung wie AES-GCM.

Kann ich hier gefahrlos ein Produktions-Webhook-Secret eingeben?

Die Berechnung findet nur in deinem Browser mit Web Crypto statt: Weder Schlüssel noch Nachricht werden übertragen. Grundsätzlich solltest du trotzdem lieber ein Test-Secret verwenden oder das Secret nach einer Debugging-Sitzung auf einem gemeinsam genutzten Rechner erneuern.

Verwandte Werkzeuge

Werkzeuge, die diesem ähnlich sind oder es ergänzen.

Ähnliche Werkzeuge

Berechne MD5-, SHA-1-, SHA-256-, SHA-384- und SHA-512-Hashes eines Textes oder einer Datei auf einmal.

Sicherheit & DatenschutzEmpfohlenDieses Werkzeug verwenden

Prüfe, ob zwei Hashes oder Prüfsummen übereinstimmen, unabhängig von Groß-/Kleinschreibung, Leerzeichen oder Doppelpunkten.

Sicherheit & DatenschutzDieses Werkzeug verwenden

Erzeuge sichere Zufallstoken von 8 bis 256 Byte in Hex, Base64 oder Base64URL, mit optionalem Präfix.

Sicherheit & DatenschutzDieses Werkzeug verwenden