Mode d'emploi
- Saisissez les données dans Message. Pour des données binaires, choisissez Hexadécimal ou Base64 sous Encodage du message.
- Saisissez le secret dans Clé et choisissez la manière dont il est écrit sous Encodage de la clé.
- Lisez les quatre lignes de Valeurs HMAC. Copiez la valeur dont vous avez besoin, ou comparez-la à celle de votre système.
- Si les valeurs diffèrent de celles d'un autre système, vérifiez d'abord les octets : une fin de ligne ou un encodage différent donne un autre HMAC.
Ce qu'est un HMAC
Un HMAC (RFC 2104) est un code d'authentification de message : une courte valeur que seule une personne connaissant la clé secrète peut produire. Il est construit à partir d'une fonction de hachage ordinaire H, appliquée deux fois au message et à la clé ; la même fonction peut donc servir aux quatre lignes du tableau. Comme la clé est nécessaire, un HMAC correspondant montre que le message n'a pas été modifié et qu'il vient de quelqu'un qui détient la clé.
Un HMAC ne cache pas le message. Quiconque possède le message peut le lire ; le HMAC permet seulement de le vérifier.
HMAC(K, m) = H((K XOR opad) || H((K XOR ipad) || m))
ipad = l'octet 0x36 répété B fois
opad = l'octet 0x5C répété B fois
B = la taille de bloc de H : 64 octets pour SHA-1 et SHA-256, 128 octets pour SHA-384 et SHA-512
Quel hash et quelle clé
HMAC-SHA-256 est le choix habituel, celui de nombreux webhooks et API. HMAC-SHA-512 repose sur la même construction, avec une sortie plus longue. HMAC-SHA-1 subsiste dans d'anciens systèmes, et n'est pas un choix pour les nouvelles conceptions.
La clé doit être aléatoire, et au moins aussi longue que la sortie du hash. Une clé saisie sous forme de mot ou de courte phrase est facile à deviner, et une clé devinée rend le HMAC sans valeur.
Hexadécimal et Base64
Les deux formes montrent les mêmes octets. L'hexadécimal écrit chaque octet en deux chiffres : SHA-256 a donc 64 chiffres. Le Base64 écrit trois octets en quatre caractères : SHA-256 a 44 caractères, dont le dernier est un = de remplissage (RFC 4648).
- HMAC-SHA-1 : 40 chiffres hexadécimaux, 28 caractères Base64
- HMAC-SHA-256 : 64 chiffres hexadécimaux, 44 caractères Base64
- HMAC-SHA-384 : 96 chiffres hexadécimaux, 64 caractères Base64
- HMAC-SHA-512 : 128 chiffres hexadécimaux, 88 caractères Base64
Exemple détaillé : RFC 4231, cas de test 2
La clé Jefe et le message what do ya want for nothing? sont le deuxième cas de test de la RFC 4231 pour SHA-256, SHA-384 et SHA-512, et de la RFC 2202 pour SHA-1. Le tableau ci-dessous est ce que la page affiche pour eux ; sa valeur HMAC-SHA-256 est celle qu'imprime la RFC : 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843.
| Algorithme | Hexadécimal | Base64 |
|---|---|---|
| HMAC-SHA-1 | effcdf6ae5eb2fa2d27416d5f184df9c259a7c79 | 7/zfauXrL6LSdBbV8YTfnCWafHk= |
| HMAC-SHA-256 | 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843 | W9zBRr9gdU5qBCQmCJV1x1oAPwidJzmDnexYuWTsOEM= |
| HMAC-SHA-384 | af45d2e376484031617f78d2b58a6b1b9c7ef464f5a01b47e42ec3736322445e8e2240ca5e69e2c78b3239ecfab21649 | r0XS43ZIQDFhf3jStYprG5x+9GT1oBtH5C7Dc2MiRF6OIkDKXmnix4syOez6shZJ |
| HMAC-SHA-512 | 164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737 | Fkt6e/z4GeLjlfvnO1bgo4e9ZCIugx/WECcM1+olBVSXWL91wFqZSm0DT2X48Ob9yuqxo01Ka0tjbgcKOLznNw== |
Questions fréquentes
Un HMAC est-il la même chose que le chiffrement du message ?
Non. Un HMAC ne cache pas le message : n'importe qui peut le lire. Il montre que le message n'a pas été modifié et que l'expéditeur connaît la clé. Pour le secret, il faut un chiffrement.
Quelle est la différence entre un hash et un HMAC ?
Un hash ne dépend que du message, donc n'importe qui peut le calculer. Un HMAC demande aussi la clé secrète : seule une personne qui possède la clé peut le produire ou le vérifier. Pour des empreintes simples, utilisez le générateur de hash.
Pourquoi mon HMAC diffère-t-il de celui que donne ma bibliothèque ?
La clé ou les octets du message diffèrent. Une clé saisie en texte correspond à ses octets UTF-8, et les mêmes lettres écrites en hexadécimal sont d'autres octets. Un saut de ligne en fin de message modifie aussi le HMAC.
Quelle longueur de clé utiliser ?
Utilisez une clé aléatoire au moins aussi longue que la sortie du hash : 32 octets pour HMAC-SHA-256. La RFC 2104 déconseille fortement une clé plus courte, et une clé faite de mots ou d'une courte phrase est facile à deviner.
Puis-je vérifier une signature de webhook avec cette page ?
Oui, si vous utilisez exactement les octets qui ont été signés. Les signatures de webhooks sont en général calculées sur le corps brut de la requête : collez donc le corps sans modification, car un JSON reformaté donne un autre HMAC.
Ma clé ou mon message sont-ils envoyés quelque part ?
Non. Le HMAC est calculé dans votre navigateur, avec le SubtleCrypto du navigateur. La clé et le message ne sont ni envoyés ni stockés.
Sources
- RFC 2104 (en anglais) : HMAC: Keyed-Hashing for Message Authentication
- RFC 4231 (en anglais) : Identifiers and Test Vectors for HMAC-SHA-224, HMAC-SHA-256, HMAC-SHA-384 and HMAC-SHA-512
- RFC 2202 (en anglais) : Test Cases for HMAC-MD5 and HMAC-SHA-1
- RFC 4648 (en anglais) : The Base16, Base32, and Base64 Data Encodings
- NIST (en anglais) : FIPS 180-4, Secure Hash Standard (SHA-1 and the SHA-2 family)
Chiffres et texte vérifiés pour la dernière fois le mardi 10 novembre 2026.