HMAC benötigt neben der Nachricht einen Schlüssel
Einfaches SHA-256 hasht die Nachrichtenbytes. HMAC-SHA-256 berechnet aus Schlüssel und Nachricht einen Authentifizierungswert. Die Konstruktion in RFC 2104 ist nicht einfach ein Hash aus vorangestelltem Schlüssel und Nachricht. Ein passender Hash ohne Schlüssel authentifiziert den Absender allein nicht.
Den RFC-Testschlüssel als Bytes nachvollziehen
Testfall 1 aus RFC 4231 verwendet zwanzig Bytes 0x0b und die Nachricht Hi There. Der folgende Code importiert einen Web-Crypto-HMAC-Schlüssel und gibt das Ergebnis hexadezimal aus. Der Text 0b zwanzigmal wiederholt ergibt 40 Bytes und eine andere Eingabe. Dies ist ein öffentlicher Testschlüssel, kein produktives Geheimnis.
Moyoutils Werkzeug berechnet einfache SHA-Hashes und hat keine HMAC-Eingabe. Der folgende Code ist ein separates JavaScript-Beispiel, kein vollständiges Login- oder Webhook-Prüfsystem. Echte Authentifizierung benötigt Schutz des geheimen Schlüssels und korrekte Prüfung.
const hex = bytes => Array.from(new Uint8Array(bytes),
n => n.toString(16).padStart(2, '0')).join('');
const keyBytes = new Uint8Array(20).fill(0x0b);
const message = new TextEncoder().encode('Hi There');
const key = await crypto.subtle.importKey(
'raw', keyBytes, {name:'HMAC', hash:'SHA-256'},
false, ['sign']);
const mac = await crypto.subtle.sign('HMAC', key, message);
console.log(hex(mac));
// b0344c61d8db38535ca8afceaf0bf12b
// 881dc200c9833da726e9376c2e32cff7Häufig gestellte Fragen
Kann ich Ergebnisse vergleichen, weil beide Namen SHA-256 enthalten?
Verwechseln Sie einfaches SHA-256 nicht mit HMAC-SHA-256. Ein HMAC-Vergleich benötigt dieselben Schlüsselbytes, Nachrichtenbytes und denselben Algorithmus. Unterscheiden Sie auch Ausgabeformate wie Hexadezimal und Base64.