Générateur HMAC
Calculez un HMAC-SHA1, SHA-256, SHA-384 ou SHA-512 avec une clé texte, hex ou Base64, en hex et Base64, et vérifiez une signature de webhook dans le navigateur.
Le message est signé tel quel, encodé en UTF-8, espaces et retours à la ligne compris.
- HMAC (hex)
- HMAC (Base64)
- En-tête de signature webhook (style GitHub)
La comparaison s’effectue en temps constant, comme sur un serveur : sa durée ne révèle pas combien de caractères correspondent.
Comment calculer un HMAC
- Collez le Message. Pour un webhook, il doit s’agir du corps brut de la requête, à l’octet près.
- Saisissez la Clé secrète et choisissez son Format de la clé : Texte (UTF-8), Hexadécimal ou Base64.
- Choisissez l’Algorithme : HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 ou HMAC-SHA512.
- Le résultat se met à jour pendant la saisie ; vous pouvez aussi cliquer sur Calculer le HMAC. Vous obtenez le HMAC (hex), le HMAC (Base64) et un En-tête de signature webhook (style GitHub), chacun avec un bouton Copier.
- Pour contrôler une signature reçue, collez-la dans Comparer avec une signature attendue (hex, Base64 ou sha256=…). L’outil indique si elle correspond.
Le message est encodé en UTF-8 tel que vous l’avez saisi, espaces et retours à la ligne compris. Le calcul passe par l’API Web Crypto du navigateur : ni le message ni la clé ne quittent votre appareil.
Qu’est-ce qu’un HMAC ?
Un HMAC (code d’authentification de message à base de hachage, RFC 2104) combine une clé secrète et une fonction de hachage :
HMAC(K, m) = H((K′ ⊕ opad) ‖ H((K′ ⊕ ipad) ‖ m))
où K′ est la clé complétée à la taille de bloc du hachage (et d’abord hachée si elle est plus longue), et ipad/opad des constantes fixes. Seul le détenteur de la clé peut produire le bon code pour un message, et la moindre modification du message change entièrement le code. C’est pourquoi on signe avec un HMAC les webhooks, les requêtes d’API (AWS Signature Version 4, par exemple) et les jetons JWT en HS256.
Un HMAC n’est pas un chiffrement : le message reste lisible. Ce n’est pas non plus un hachage de mot de passe ; pour stocker des mots de passe, utilisez une fonction lente comme bcrypt ou Argon2.
La longueur du résultat dépend de l’algorithme : 20 octets pour SHA-1, 32 pour SHA-256, 48 pour SHA-384 et 64 pour SHA-512. Le HMAC-SHA1 reste considéré comme sûr en tant que MAC, mais préférez SHA-256 pour tout nouveau système. On recommande une clé aléatoire au moins aussi longue que le résultat (32 octets pour HMAC-SHA256) ; les formats hexadécimal et Base64 permettent de saisir directement ces octets aléatoires.
Vérifier un webhook GitHub
GitHub signe chaque livraison avec le secret de votre webhook et envoie le résultat dans l’en-tête X-Hub-Signature-256, sous la forme sha256= suivi du HMAC-SHA256 du corps en hexadécimal. L’exemple de la documentation GitHub utilise le secret It's a Secret to Everybody et le corps Hello, World! ; saisissez-les ici avec HMAC-SHA256 et l’en-tête affiché sera :
X-Hub-Signature-256: sha256=757107ea0eb2509fc211221cce984b8a37570b6d7586c22c46f4379c8b043e17
Le champ de comparaison accepte la ligne d’en-tête complète, la valeur sha256=… ou une signature nue en hex ou en Base64 (Stripe, Shopify et Slack suivent des schémas proches, avec leurs propres en-têtes et chaînes signées). Pour SHA-384 et SHA-512, l’outil affiche un en-tête générique X-Signature, faute de convention répandue.
Comparaison en temps constant
Un serveur qui compare des signatures avec une comparaison de chaînes ordinaire s’arrête au premier caractère différent. En mesurant les temps de réponse, un attaquant pourrait deviner une signature valide caractère par caractère. La comparaison de cet outil examine tous les octets quel que soit le résultat, comme doit le faire un serveur avec crypto.timingSafeEqual en Node.js, hmac.compare_digest en Python ou hash_equals en PHP.
Questions fréquentes
Pourquoi mon HMAC diffère-t-il de celui de mon serveur ?
Les causes habituelles : un message différent (le serveur signe le corps brut alors que vous avez collé un JSON reformaté, ou les retours à la ligne ne sont pas les mêmes), une clé saisie dans le mauvais Format de la clé, ou un autre algorithme. Une seule espace en trop suffit à tout changer.
Faut-il un résultat en hex ou en Base64 ?
Les deux représentent les mêmes octets. GitHub utilise l’hexadécimal, alors que beaucoup d’autres API, comme Shopify, utilisent le Base64. Choisissez le format attendu par le système destinataire.
Puis-je utiliser une clé vide ?
L’outil l’accepte mais vous prévient : avec une clé vide, n’importe qui peut calculer le même HMAC, qui ne prouve donc rien.
Le HMAC-SHA1 est-il cassé comme SHA-1 ?
Les attaques par collision contre SHA-1 ne cassent pas le HMAC-SHA1, toujours considéré comme sûr en tant que MAC. Il reste proposé pour les systèmes anciens, comme l’ancien en-tête X-Hub-Signature, mais les nouveaux systèmes devraient utiliser HMAC-SHA256 ou plus.
Ma clé secrète est-elle en sécurité ici ?
La clé et le message sont traités uniquement dans votre navigateur et ne sont jamais envoyés. Manipulez tout de même un secret de production avec prudence et changez-le si vous pensez qu’il a pu être exposé.
Outils similaires
- Générateur de hash Calculez le hash MD5, SHA-1, SHA-256 ou SHA-512 d'un texte ou d'un fichier de toute taille et vérifiez une somme de contrôle, sans rien envoyer.
- Décodeur JWT Décodez l’en-tête et la charge utile d’un JWT, lisez exp, iat et nbf en dates et vérifiez une signature HS256, RS256, ES256 ou EdDSA dans le navigateur.
- Encodeur et décodeur Base64 Encodez et décodez du texte en Base64 en ligne, avec prise en charge complète de l'UTF-8 et option base64url. Tout se fait dans votre navigateur.
- Générateur et vérificateur bcrypt Générez un hash bcrypt avec un coût de 4 à 14, vérifiez un mot de passe avec un hash existant et affichez sa version, son coût, son sel et son empreinte.