Générateur HMAC

Créez et vérifiez des signatures HMAC avec SHA-256, SHA-384, SHA-512 ou SHA-1, avec la clé en texte, hexadécimal ou Base64.

Le formulaire interactif est prêt lorsque JavaScript est activé.

Mode d’emploi

Saisissez ou collez le message, entrez la clé secrète et choisissez l’algorithme ; la signature apparaît pendant la saisie, en hexadécimal et en Base64, chacune avec son bouton « Copier ». Elle est calculée avec l’API Web Crypto du navigateur, et rien n’est envoyé.

HMAC, défini dans le RFC 2104, combine une clé secrète et une fonction de hachage. N’importe qui peut calculer le SHA-256 d’un message, mais seul le détenteur de la clé peut calculer son HMAC : une signature qui correspond prouve donc que le message vient d’un détenteur de la clé et n’a pas été modifié en route. La signature a la longueur du hachage : 32 octets pour SHA-256, 48 pour SHA-384, 64 pour SHA-512 et 20 pour SHA-1.

La clé peut être saisie en texte, utilisé comme octets UTF-8, ou fournie en hexadécimal ou en Base64 quand un service l’affiche ainsi : les mêmes caractères lus dans un autre format forment une autre clé. Le message est signé tel quel, si bien qu’un espace, un retour à la ligne ou un caractère différent change toute la signature.

Pour vérifier un webhook, collez le corps brut de la requête comme message, le secret du point de terminaison comme clé et la signature reçue dans « Signature à vérifier ». GitHub, par exemple, envoie un en-tête X-Hub-Signature-256 avec sha256= suivi du HMAC-SHA256 du corps en hexadécimal ; le préfixe est ignoré. SHA-1 n’est proposé que pour les anciens systèmes : GitHub envoie encore un en-tête HMAC-SHA1, uniquement par compatibilité.

Exemple

Vérifie l’exemple de webhook documenté par GitHub : le secret « It's a Secret to Everybody » et le contenu « Hello, World! » donnent la signature sha256= publiée par GitHub, qui correspond donc.

  • Jefe · what do ya want for nothing?HMAC-SHA256 5bdcc146…64ec3843 : le vecteur de test du RFC 4231.
  • It's a Secret to Everybody · Hello, World!L’exemple documenté par GitHub : sha256=757107ea…8b043e17.
  • 0b0b…0b (hex, 20 bytes) · Hi ThereHMAC-SHA256 b0344c61…2e32cff7 : cas de test 1 du RFC 4231, avec la clé en hexadécimal.
  • abcdEn texte, 4 octets ; en hexadécimal, 2 octets (ab cd) : deux clés différentes et deux signatures différentes.

Questions fréquentes

HMAC, est-ce la même chose qu’un hachage ?

Non. Un hachage comme SHA-256 n’a pas besoin de clé : n’importe qui peut le recalculer après avoir modifié le message. Un HMAC exige la clé secrète, donc seul celui qui la détient peut produire une signature valide.

Pourquoi la signature de mon webhook ne correspond-elle pas ?

En général, le message n’est pas, octet par octet, ce qui a été signé : un framework a analysé puis resérialisé le JSON, supprimé des espaces ou changé l’encodage. Signez le corps brut tel qu’il est arrivé, et vérifiez que le secret est celui de ce point de terminaison et que le format de la clé est le bon.

Faut-il utiliser SHA-1 ?

Seulement pour dialoguer avec un système qui l’exige encore. Les nouvelles signatures utilisent SHA-256 ou des hachages plus longs, et GitHub, par exemple, ne garde son en-tête de signature SHA-1 que par compatibilité.

Ma clé est-elle envoyée quelque part ?

Non. La signature est calculée dans votre navigateur avec l’API Web Crypto. Évitez tout de même de coller des secrets de production réels dans un site que vous ne contrôlez pas : un secret de test suffit pour voir comment fonctionnent les signatures.

Outils associés