Comment calculer des signatures HMAC
Signez des requêtes API avec secret partagé, déboguez des webhooks et vérifiez les signatures façon Stripe / GitHub / AWS avec le bon algorithme et format de digest.

D’autres utilitaires qui complètent bien ce guide :
Pourquoi c’est important
Les webhooks sont le canal de retour du cloud. Stripe signale un paiement ; GitHub une release. Pour prouver l’authenticité, l’expéditeur joint une signature HMAC sur le corps avec un secret partagé. Si votre vérificateur rejette tout, impossible de savoir si le secret, l’algorithme ou le corps modifié par un proxy est en cause. Un outil HMAC côte à côte avec prévisualisation des entrées réduit le cycle de débogage à quelques minutes.
Trois scénarios réels
Collez la charge, le secret, l’horodatage ; calculez HMAC-SHA-256 ; comparez à l’en-tête Stripe-Signature.
Handler webhook livré
Construisez la chaîne canonique, signez HMAC avec le secret partagé, joignez en en-tête.
Appel accepté
Utilisez les entrées exemple du fournisseur, calculez, comparez. Si ça ne colle pas, la doc est fausse.
Doc confirmée
Parcours
Ouvrez le générateur HMAC.
Coller le message
Les octets exacts signés — en général le corps HTTP brut. Attention aux différences d’espaces.
Coller le secret
Par défaut les chaînes sont interprétées en UTF-8. Basculez « secret en hex » ou « secret en Base64 » si le fournisseur distribue des clés binaires encodées.
Choisir la fonction de hash
SHA-256 est le défaut moderne ; SHA-1 traîne encore sur vieux systèmes ; SHA-512 existe mais reste rare.
Choisir le format de sortie
Hex (souvent minuscule) pour valeurs d’en-tête. Base64 requis pour AWS Sig V4 et quelques API.
Comparer à la signature reçue
Collez la valeur d’en-tête. L’outil surligne correspondance ou écart caractère par caractère.
Entrées
Message: t=1731234567.{"id":"evt_123","type":"payment_intent.succeeded"}
Secret: whsec_abc123xyz
Algorithm: SHA-256HMAC-SHA-256 hex
4ed7a40c1e1f9c0bba9d7c1f24eb44a3f0bd06d0c81bd5d4a7f6cf52a6f00f1e
Conseils avancés
- Diff le corps avant de signer. Beaucoup d’échecs viennent d’un proxy qui ajoute un retour ligne final au corps. La signature porte sur les octets exacts — un seul
\nfinal compte. - Côté serveur, comparez en temps constant. C’est le rôle de votre code, pas de l’outil navigateur. Ici la comparaison peut être naive car rien ne sort de la page.
- Faites tourner les secrets sans coupure en acceptant deux clés valides un court moment. L’outil calcule les deux signatures pour confirmer la nouvelle clé avant de retirer l’ancienne.
- Documentez votre chaîne canonique. AWS Sig V4 concatène méthode, chemin, en-têtes et hash du corps ; reproduisez-la une fois à la main avec l’outil pour valider la formule.
Pièges courants
Piège courant
Écart d’un seul retour ligne final
Votre IDE a un \n final sur le corps ; le fil réseau non. Retirez les espaces avant signature — mais exactement ce que le vérificateur retire.
Piège courant
Le secret est lu avec le mauvais encodage
Certains fournisseurs envoient des clés en Base64 ; le HMAC doit utiliser les octets décodés, pas les caractères ASCII. Réglez l’encodage d’entrée selon la doc.
Piège courant
BOM UTF-8 caché dans le message
La séquence EF BB BF en tête de charge change le hash. Ouvrez en vue hex si les signatures échouent « mystérieusement ».
Quand ce n’est pas l’outil adapté
- Signatures à clé publique (RSA, ECDSA, Ed25519) — autre vérificateur. Voir Vérifier des signatures numériques en ligne.
- Chiffrement symétrique — le HMAC authentifie, il ne chiffre pas. Prenez AES-GCM pour confidentialité + authenticité.
- Hachage de mots de passe — n’utilisez pas le HMAC pour stocker des mots de passe. Prenez une lente KDF.
FAQ
Si ma clé est plus courte que la taille de bloc ?
Le HMAC le gère en interne. Inutile de compléter la clé manuellement.
Je signe avant ou après formatage JSON ?
Toujours après fixation de la forme canonique. Si vous reformatez après signature, la signature casse.
Quelque chose est-il envoyé sur un serveur ?
Non. Le HMAC est calculé dans le navigateur via WebCrypto.
Étapes suivantes
- Hashez le corps séparément d’abord avec le générateur de hash quand le protocole demande
body_hashpuis HMAC. - Construisez la signature complète de requête avec l’outil signature de paramètres.
- Pour les JWT avec algorithmes HS*, le codec aide à inspecter les segments — le JWT utilise le HMAC pour les
algen HS*.