En quoi consiste cet outil ?
HMAC signifie Hash-based Message Authentication Code. Il combine une clé secrète, un message et une fonction de hachage standard (comme SHA-256) pour produire une empreinte de longueur fixe. Toute personne disposant de la même clé et du même message obtiendra exactement le même HMAC — mais sans la clé, il est calculatoirement impossible de produire un HMAC valide pour un message, même en connaissant l'algorithme de hachage utilisé.
C'est là toute la différence avec un simple hachage : un hachage classique (MD5, SHA-256, etc.) ne prend en entrée que le message, si bien que n'importe qui peut le calculer et il ne prouve rien sur son auteur. Un HMAC prend le message *et* une clé secrète, de sorte qu'un HMAC valide prouve que l'expéditeur possédait bien le secret — c'est un mécanisme d'authentification, pas une simple vérification d'intégrité.
Le HMAC est formellement normalisé par le NIST dans le FIPS 198-1 et défini pour les protocoles internet dans la RFC 2104 de l'IETF. Cet outil calcule les HMAC via l'API Web Crypto native de votre navigateur (`crypto.subtle.sign` avec l'algorithme HMAC), qui implémente correctement la RFC 2104 plutôt qu'une version JavaScript maison.
Pourquoi l'utiliser ?
- Vous intégrez le webhook Stripe et le endpoint renvoie "signature verification failed" — vous collez la même clé et le même payload ici pour voir si votre serveur calcule correctement le HMAC-SHA256 avant de continuer à déboguer le code.
- Vous venez d'écrire la fonction qui signe les requêtes sortantes vers une API tierce et voulez comparer sa sortie à un calcul indépendant avant de la valider.
- Un collègue vous a transmis un secret partagé pour tester une intégration et vous devez générer la signature d'une requête de test sans installer de bibliothèque ni écrire un script juste pour ça.
- Vous documentez comment signer les requêtes vers votre propre API interne et avez besoin d'un exemple reproductible avec clé, message et HMAC résultant à inclure dans le guide de l'équipe.
- Vous soupçonnez votre backend d'utiliser SHA-1 au lieu de SHA-256 pour signer un token et voulez comparer les deux résultats côte à côte pour confirmer lequel correspond à celui que vous recevez.
Mode d'emploi
- Saisissez votre clé secrète dans le champ « Clé secrète ».
- Saisissez le message que vous souhaitez authentifier dans le champ « Message ».
- Les résultats HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 et HMAC-SHA512 sont générés instantanément (cochez « Sortie en majuscules » si le système visé attend des lettres majuscules).
- Cliquez sur « Copier » à côté du HMAC dont vous avez besoin.
Exemple
Entrée
Clé secrète : key
Message : The quick brown fox jumps over the lazy dogRésultat
HMAC-SHA256: f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8
HMAC-SHA1: de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9Il s'agit d'un vecteur de test standard publié : avec la clé « key » et ce message exact, HMAC-SHA256 et HMAC-SHA1 produisent toujours ces valeurs quelle que soit l'implémentation correcte utilisée, ce qui vous permet de vérifier indépendamment le résultat de cet outil.
HMAC contre simple hachage : quand une clé est nécessaire
La question déterminante est : devez-vous prouver qui a créé cette empreinte, ou simplement que le contenu n'a pas changé ? Si une somme de contrôle publique suffit — vérifier qu'un fichier téléchargé correspond à ce qu'a indiqué l'éditeur, dédupliquer des enregistrements —, un simple hachage fait l'affaire et n'importe qui peut le vérifier, sans clé. Si vous devez prouver que l'empreinte n'a pu être produite que par une personne détenant un secret précis — authentifier l'appelant d'une API, faire confiance à l'expéditeur d'un webhook —, il vous faut du HMAC, car un simple hachage donnerait à un attaquant sans aucun secret la même capacité à forger une empreinte valide que l'expéditeur légitime.
→ Générateur de hachage multi-algorithmes · Décodeur JWT · Générateur MD5
Comparaison des quatre algorithmes HMAC
Les quatre utilisent la même construction HMAC issue de la RFC 2104, et ne diffèrent que par la fonction de hachage sous-jacente, donc par la longueur de sortie.
| Algorithme | Taille de sortie | Usage typique |
|---|---|---|
| HMAC-SHA1 | 160 bits (40 caractères hexadécimaux) | API héritées, anciennes signatures OAuth 1.0a |
| HMAC-SHA256 | 256 bits (64 caractères hexadécimaux) | Signature de requêtes API, JWT HS256, vérification de webhooks |
| HMAC-SHA384 | 384 bits (96 caractères hexadécimaux) | Signatures à confiance renforcée nécessitant une sortie plus longue |
| HMAC-SHA512 | 512 bits (128 caractères hexadécimaux) | Empreintes de longueur maximale pour applications à haute sécurité |
Cas d'usage courants
- Signer les requêtes API sortantes avec un secret partagé pour que le serveur puisse vérifier l'identité de l'appelant.
- Vérifier les charges utiles de webhooks entrants (les en-têtes Stripe-Signature, X-Hub-Signature-256 de GitHub et similaires utilisent tous HMAC-SHA256).
- Générer et valider la partie signature d'un JWT signé avec HS256/HS384/HS512.
- Vérifier que votre implémentation HMAC côté serveur ou côté client correspond au résultat attendu avant de la déployer.
Erreurs courantes lors du débogage d'une signature HMAC qui ne correspond pas
- Signer le JSON reformaté par votre framework au lieu du corps brut exact de la requête — la plupart des fournisseurs de webhooks (Stripe compris) exigent de signer les octets exacts reçus avant tout parsing, car même un espace en trop change le HMAC résultant.
- Utiliser un encodage de texte différent de l'UTF-8 d'un côté de l'intégration — presque toutes les bibliothèques modernes utilisent l'UTF-8 par défaut, mais un système hérité en Latin-1 produira un HMAC différent pour le même texte visible.
- Comparer une sortie en hexadécimal minuscule à une valeur attendue en majuscules (ou en Base64 au lieu d'hexadécimal) — la valeur cryptographique est la même, mais une comparaison de chaînes littérale échouera si les formats ne correspondent pas exactement.
- Oublier un saut de ligne final ajouté automatiquement par votre éditeur de texte lors du collage de la clé ou du message — invisible à l'œil, mais change complètement le HMAC calculé.
Foire aux questions
Qu'est-ce que le HMAC ?
Le HMAC (Hash-based Message Authentication Code) combine une clé secrète et un message via une fonction de hachage pour produire une empreinte prouvant à la fois l'intégrité du message et la possession de la clé par l'expéditeur. Il est défini dans le FIPS 198-1 du NIST et la RFC 2104 de l'IETF.
Quelle est la différence entre HMAC et un simple hachage ?
Un simple hachage (SHA-256, MD5, etc.) ne prend en entrée que le message — n'importe qui peut le calculer, ce qui prouve seulement que le message n'a pas été corrompu, pas qui l'a envoyé. Un HMAC prend le message plus une clé secrète : si vous devez prouver qu'un message provient d'une personne détenant un secret précis (une signature d'API, l'expéditeur d'un webhook), il vous faut du HMAC. Si vous devez seulement vérifier qu'un fichier ou un message n'a pas changé sans prouver son auteur, un simple hachage suffit.
Ma clé secrète est-elle envoyée à un serveur ?
Non. Cet outil calcule le HMAC entièrement dans votre navigateur grâce à l'API Web Crypto. Votre clé et votre message ne sont jamais transmis nulle part — vous pouvez tester en toute sécurité de véritables secrets de production.
Quel algorithme choisir — SHA-1, SHA-256, SHA-384 ou SHA-512 ?
Utilisez HMAC-SHA256, sauf si un système précis impose autre chose : c'est la norme de facto pour la signature d'API (utilisée par AWS, Stripe, les webhooks GitHub et la plupart des API modernes) et il offre une bonne marge de sécurité. HMAC-SHA1 reste courant dans les systèmes hérités (comme les anciennes implémentations OAuth 1.0a), mais le hachage sous-jacent de SHA-1 est jugé plus faible ; HMAC-SHA384/512 s'utilisent lorsqu'une sortie plus longue ou une marge de sécurité supplémentaire est spécifiquement requise.
HMAC-SHA1 est-il dangereux, puisque SHA-1 seul est cassé ?
Les attaques par collision de 2017 ont cassé SHA-1 en tant que simple fonction de hachage, mais HMAC-SHA1 reste considéré comme cryptographiquement solide, car la sécurité du HMAC ne repose pas de la même manière sur la résistance aux collisions. Cela dit, mieux vaut préférer HMAC-SHA256 ou supérieur pour les nouveaux systèmes — cela n'a aucun inconvénient pratique et évite la question.
Quels sont les usages concrets courants du HMAC ?
Signer des requêtes API REST afin qu'un serveur puisse vérifier que l'appelant détient bien le secret d'API partagé ; vérifier les charges utiles de webhooks provenant de services comme Stripe, GitHub ou Shopify pour s'assurer qu'une requête vient réellement d'eux et n'a pas été falsifiée ; générer des mots de passe à usage unique basés sur le temps (TOTP/HOTP) pour l'authentification à deux facteurs ; et signer des jetons JWT avec les algorithmes HS256/HS384/HS512.
Pourquoi mon HMAC calculé ici ne correspond-il pas à celui généré par mon serveur ?
Les causes les plus courantes : espaces ou sauts de ligne invisibles en fin de clé ou de message, un encodage de caractères différent (UTF-8 contre Latin-1) lors de la construction du message, ou la signature du corps de requête déjà parsé en JSON au lieu du corps brut exact envoyé sur le réseau — de nombreux webhooks exigent de signer le payload brut, pas une version reformatée.
Puis-je utiliser une clé secrète avec des caractères spéciaux ou Unicode ?
Oui, l'outil accepte n'importe quel texte dans le champ clé secrète. Notez que si votre clé contient des caractères non-ASCII, l'encodage exact des octets doit correspondre entre cet outil et votre système cible pour obtenir des résultats identiques — les deux utilisent l'UTF-8 en interne, la norme de facto.
Quelle différence avec la signature d'un JWT ?
Un JWT signé en HS256 utilise HMAC-SHA256 en interne sur l'en-tête et la charge encodés en Base64URL, joints par un point — cet outil peut donc aider à vérifier manuellement la partie signature d'un JWT, mais ne génère ni ne décode le token complet. Pour cela, utilisez notre Décodeur JWT lié plus bas.
Puis-je générer un HMAC d'un fichier, pas seulement de texte ?
Pas directement — le champ message de cet outil accepte du texte, pas des fichiers binaires. Pour vérifier la signature d'un gros fichier, il vous faudrait un outil en ligne de commande comme openssl capable de traiter le contenu binaire du fichier comme message d'entrée.