Datei hochladen
  1. base64hub
  2. Schlüssel & Hashes
  3. HMAC-Generator

HMAC-Generator (Base64)

Geben Sie die Nachricht und den geheimen Schlüssel ein und erhalten Sie die HMAC-Signatur in Base64, Base64URL und Hex. So debuggen Sie Webhook-Signaturen und signierte API-Anfragen, ohne das Secret irgendwohin zu senden.

Kostenlos ohne Anmeldung, ohne Limits Lokal kein Upload Schlüssel als Text-, Hex- oder Base64-Bytes Aktualisiert 27.10.2026

Wird in Ihrem Browser verarbeitet. Diese Seite kann Ihre Daten nirgendwohin senden – woher wir das wissen

So berechnen Sie einen HMAC in Base64

  1. Der Modus HMAC und SHA-256 sind ausgewählt. Wählen Sie unter Algorithmus einen anderen, wenn Ihre API SHA-1, SHA-384, SHA-512 oder MD5 verwendet.
  2. Tragen Sie unter Geheimer Schlüssel den Schlüssel ein und stellen Sie Schlüssel als ein: Text (UTF-8) für eine normale Secret-Zeichenkette, Hex oder Base64, wenn der Schlüssel als kodierte Bytes vorliegt.
  3. Tippen oder fügen Sie die Nachricht in Text ein, oder stellen Sie Eingabe auf Datei und legen Sie genau die Payload-Datei ab.
  4. Kopieren Sie die Signatur als Base64, Base64URL oder Hex. Alle Algorithmen zeigt den HMAC mit allen Hashes auf einmal, was hilft, wenn die Dokumentation vage ist, welcher verwendet wird.

Ein leerer Schlüssel wird akzeptiert und liefert trotzdem ein Ergebnis, mit dem Hinweis, dass ein solcher HMAC nichts schützt.

Beispielwerte

Mit dem Schlüssel key und der Nachricht The quick brown fox jumps over the lazy dog:

AlgorithmusHMAC in Base64
HMAC-MD5gAcHE0Y+d0m5DC3CSRHidQ==
HMAC-SHA13nybhbi3iqa8ino29wqQcBydtNk=
HMAC-SHA25697yD9DBThCSxMpjmqm+xQ+9NWaFJRhdZl0edvC0aPNg=
HMAC-SHA512tCrwkFe6weLUFwjkipAuCbX/fxKrQopP6GZTxz3SSPuC+UilSfe3kaW0GRXuTR7Dk1NX5OIxclDQNyr6Lr7rOg==

Der HMAC-SHA256-Wert in Hex ist f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8, der bekannte Testvektor aus dem Wikipedia-Artikel zu HMAC. Die Kodierung des Schlüssels ändert das Ergebnis: Der Text a2V5 als Schlüssel ergibt 5O+7AtpguFrgIRw1qXGU+m0OaTs1oV1kwRQ/hI1WAUE=, während a2V5 als Base64 gelesen die Bytes von key sind und wieder 97yD9DBT… ergibt.

Webhook-Signaturen: Base64 oder Hex

Anbieter sind sich bei HMAC einig, nicht aber bei der Ausgabekodierung oder bei dem, was signiert wird. Einige gut dokumentierte Beispiele:

AnbieterHeaderAlgorithmusKodierungSignierter Inhalt
ShopifyX-Shopify-Hmac-Sha256HMAC-SHA256Base64roher Request-Body
Standard Webhooks (Svix)webhook-signature: v1,…HMAC-SHA256Base64id.timestamp.body, Schlüssel aus whsec_-Base64
TwilioX-Twilio-SignatureHMAC-SHA1Base64URL plus sortierte POST-Parameter
GitHubX-Hub-Signature-256: sha256=…HMAC-SHA256Hexroher Request-Body
StripeStripe-Signature: t=…,v1=…HMAC-SHA256Hextimestamp.body

Stimmt ein Wert aus diesem Tool mit dem Hex überein, aber Ihr Code vergleicht Base64, oder umgekehrt, dann ist die Berechnung richtig, und nur die Kodierung unterscheidet sich. Was signiert wird, steht in der Dokumentation des Anbieters; die Zeitstempel-Präfixe sollen das Wiederabspielen alter Anfragen verhindern.

Eine Signatur im Code prüfen

Vergleichen Sie rohe Bytes in konstanter Zeit, und hashen Sie den Body genau so, wie er empfangen wurde:

const crypto = require("crypto");

function verifyWebhook(rawBody, secret, signatureHeader) {
  const expected = crypto.createHmac("sha256", secret).update(rawBody).digest();
  const given = Buffer.from(signatureHeader, "base64");
  return given.length === expected.length && crypto.timingSafeEqual(given, expected);
}

Mit rawBody als Buffer des Fuchs-Satzes, dem Secret key und dem Base64-Wert aus der Tabelle gibt die Funktion true zurück. Übergeben Sie stattdessen JSON.stringify(JSON.parse(body)), liefert sie false, sobald das JSON des Anbieters ein Leerzeichen enthielt, das Ihr Serialisierer weglässt. In Express heißt das: Lesen Sie den Body auf der Webhook-Route mit express.raw().

Das Python-Gegenstück verwendet hmac.new(key, body, hashlib.sha256).digest(), kodiert das Ergebnis in Base64 und prüft mit hmac.compare_digest. Auf der Kommandozeile liefert openssl dgst -sha256 -hmac 'key' -binary | base64 dasselbe Base64; verwenden Sie -mac HMAC -macopt hexkey:…, wenn der Schlüssel in Hex vorliegt. Für einen starken Schlüssel erzeugt die Voreinstellung für HMAC-Secrets im Base64-Schlüsselgenerator 32 Zufallsbytes. Für signierte Tokens statt signierter Anfragen siehe den JWT-Encoder.

Häufige Fragen

Warum stimmt mein Webhook-HMAC nicht überein?

Die Signatur umfasst die exakten Bytes des Request-Bodys. Hat Ihr Framework das JSON geparst und Sie hashen eine neu serialisierte Kopie, ändern sich Leerzeichen oder Schlüsselreihenfolge, und das Ergebnis weicht ab. Hashen Sie den Roh-Body, prüfen Sie, ob der Anbieter Hex oder Base64 erwartet, und ob das Secret zuerst dekodiert werden muss.

Ist das HMAC-Secret Text oder Base64?

Das hängt vom Anbieter ab. Die meisten geben Ihnen eine Zeichenkette, die als UTF-8-Text verwendet wird. Manche vergeben einen Base64-kodierten Schlüssel, manchmal hinter einem Präfix wie whsec_, der vor der Verwendung in Bytes dekodiert werden muss. Stellen Sie Schlüssel als passend ein.

Was ist der Unterschied zwischen einem Hash und einem HMAC?

Den SHA-256 einer Nachricht kann jeder berechnen, ein Hash erkennt also nur versehentliche Änderungen. Ein HMAC mischt einen geheimen Schlüssel ein, sodass nur jemand mit dem Schlüssel einen gültigen Wert erzeugen kann. Das macht ihn zu einer Signatur.

Kann ich HMAC-MD5 oder HMAC-SHA1 verwenden?

Beide werden von älteren APIs noch genutzt und sind deutlich stärker als reines MD5 oder SHA-1, weil sich Kollisionen nicht in HMAC-Fälschungen übertragen lassen. Für neue Entwürfe wählen Sie HMAC-SHA256.