HMAC nécessite une clé en plus du message
SHA-256 simple calcule le hash des octets du message. HMAC-SHA-256 calcule une valeur d’authentification avec une clé et un message. La construction de RFC 2104 ne consiste pas simplement à préfixer le message par la clé puis à calculer un hash. Un hash sans clé concordant n’authentifie pas à lui seul l’expéditeur.
Reproduire les octets de la clé de test RFC
Le cas 1 de RFC 4231 utilise vingt octets 0x0b et le message Hi There. Le code ci-dessous importe une clé HMAC Web Crypto et affiche le résultat hexadécimal. Répéter le texte 0b vingt fois produit 40 octets, donc une autre entrée. Cette clé de test est publique, ce n’est pas un secret de production.
L’outil Moyoutil calcule des hashes SHA simples et ne propose pas d’entrée HMAC. Ce code JavaScript distinct n’est pas un système complet de connexion ou de vérification de webhooks. Une véritable authentification exige de protéger la clé secrète et de vérifier correctement.
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
// 881dc200c9833da726e9376c2e32cff7Questions fréquemment posées
Puis-je comparer les résultats parce que les noms contiennent SHA-256 ?
Ne confondez pas SHA-256 simple et HMAC-SHA-256. Comparer HMAC exige les mêmes octets de clé et de message et le même algorithme. Distinguez aussi les formats de sortie, comme l’hexadécimal et Base64.