Pack Camo

Générateur et vérificateur HMAC

Signatures HMAC-SHA256, SHA-1, SHA-384 et SHA-512, avec clés hex, Base64 ou texte.

Tout s'exécute localement — rien n'est téléversé.

Clé secrète

3 octets

Message

43 octets

Signature HMAC-SHA-256

  • HexCalcul…
  • HEXCalcul…
  • Base64Calcul…
  • Base64urlCalcul…
  • En-têteCalcul…

Calculez un HMAC ou vérifiez celui qu'un webhook vous a envoyé

Ce générateur HMAC signe un message avec une clé secrète en HMAC-SHA256, HMAC-SHA1, HMAC-SHA384 ou HMAC-SHA512, et affiche la signature en hex minuscule, hex majuscule, Base64 et Base64url en même temps. La clé et le message peuvent chacun être saisis en texte brut, en hex ou en Base64 : l'outil fonctionne donc avec des secrets binaires bruts comme avec des mots de passe. Collez la signature reçue — <code>sha256=…</code> de GitHub, un en-tête Stripe <code>t=…,v1=…</code> ou du Base64 simple — et il vous indique si elle correspond. Le calcul utilise la Web Crypto API de votre navigateur ; la clé et le message ne quittent jamais la page.

Comment générer ou vérifier un HMAC

  1. 1Choisissez la fonction de hachage : SHA-256 est celle qu'utilisent la plupart des API et des webhooks.
  2. 2Saisissez ou collez la clé secrète et choisissez son format : texte, hex ou Base64. Utilisez Clé aléatoire pour créer un nouveau secret de la bonne longueur.
  3. 3Collez le message — pour un webhook, le corps brut de la requête exactement tel qu'il est arrivé, octet par octet.
  4. 4Copiez la signature dans l'encodage dont vous avez besoin. Pour vérifier une signature, collez-la dans Signature attendue ; un préfixe comme sha256= est reconnu et ignoré.

Qu'est-ce qu'un HMAC ?

Un HMAC (hash-based message authentication code, RFC 2104) est une courte valeur calculée à partir d'un message et d'une clé secrète. Toute personne qui connaît la clé peut calculer la même valeur et vérifier ainsi deux choses à la fois : que le message n'a pas été modifié en route, et qu'il a été produit par quelqu'un qui détient la clé. Sans la clé, un attaquant ne peut ni forger un HMAC valide pour un nouveau message, ni en ajuster un après avoir modifié le message.

Ce n'est pas simplement le hachage de la clé et du message mis bout à bout. HMAC hache deux fois, la clé étant mélangée à un bourrage interne et à un bourrage externe : H((K ⊕ opad) ‖ H((K ⊕ ipad) ‖ message)). C'est cette construction qui le rend sûr avec SHA-256 et SHA-512, qui seuls sont exposés aux attaques par extension de longueur lorsqu'on les utilise sous la forme H(key ‖ message).

Vérifier les signatures de webhook

La plupart des fournisseurs de webhooks signent chaque requête avec un HMAC du corps et placent le résultat dans un en-tête. Pour la vérifier, calculez le HMAC du corps brut avec votre secret de signature et comparez-le à la valeur de l'en-tête. L'erreur la plus courante consiste à hacher un objet JSON resérialisé au lieu des octets reçus : un ordre de clés différent ou un espace manquant change complètement la signature.

Certains fournisseurs signent plus que le corps. Stripe signe timestamp.body — la valeur t de l'en-tête, un point, puis le payload — et Slack signe v0:timestamp:body. Construisez exactement cette chaîne comme message ici, puis collez l'en-tête complet dans le champ de vérification ; la valeur v1= ou v0= en est extraite.

GitHub
<code>X-Hub-Signature-256: sha256=&lt;hex&gt;</code>, HMAC-SHA256 du corps avec le secret du webhook en texte.
Stripe
<code>Stripe-Signature: t=…,v1=&lt;hex&gt;</code>, HMAC-SHA256 de <code>t.body</code>.
Shopify
<code>X-Shopify-Hmac-Sha256: &lt;Base64&gt;</code>, HMAC-SHA256 du corps.
Slack
<code>X-Slack-Signature: v0=&lt;hex&gt;</code>, HMAC-SHA256 de <code>v0:timestamp:body</code>.

Clés en texte, hex et Base64

Une clé est une suite d'octets, et la façon dont elle est écrite compte. Le texte abc123 fait six octets ; le hex abc123 correspond à trois octets complètement différents. Beaucoup de services fournissent des secrets sous forme de chaînes hex ou Base64 mais attendent que vous utilisiez la chaîne elle-même comme clé texte — c'est le cas de GitHub et de Stripe — tandis que d'autres, comme les chaînes de signature de type AWS et les app proxies de Shopify, utilisent les octets décodés. Si une signature ne correspond pas, changer l'encodage de la clé est la première chose à essayer.

Pour une nouvelle clé, utilisez des octets aléatoires au moins aussi longs que la sortie du hachage : 32 octets pour HMAC-SHA256, 64 pour HMAC-SHA512. Une clé plus longue n'apporte rien — tout ce qui dépasse la taille de bloc du hachage est d'abord haché.

Comparaison à temps constant

Quand votre serveur vérifie une signature, comparez-la avec une fonction à temps constant comme crypto.timingSafeEqual en Node.js, hmac.compare_digest en Python ou hash_equals en PHP. Une comparaison de chaînes classique s'arrête au premier caractère différent, et le temps qu'elle prend peut révéler quelle part d'une signature forgée était correcte. Cette page utilise le même procédé à temps constant : le code sert donc de référence autant que de vérification.

Si vous avez seulement besoin d'une empreinte ordinaire d'un fichier ou d'un texte, sans clé, utilisez le générateur de hash. Pour signer des jetons, le générateur de secret JWT crée des clés HS256 de la bonne taille.

Questions fréquentes

Quelle est la différence entre un hash et un HMAC ?
Un hash comme SHA-256 ne dépend que des données, donc n'importe qui peut le recalculer. Un HMAC dépend aussi d'une clé secrète, donc seule une personne qui détient la clé peut le produire ou le vérifier. C'est pourquoi un HMAC prouve l'authenticité, et pas seulement l'intégrité.
Pourquoi mon HMAC ne correspond-il pas à celui de l'API ?
Presque toujours, l'entrée diffère : le message n'est pas octet pour octet le corps brut (JSON resérialisé, retour à la ligne final, fins de ligne différentes), la clé est lue comme du texte alors que le service attend des octets hex ou Base64 ou l'inverse, ou le fournisseur signe un horodatage plus le corps au lieu du corps seul.
Quel algorithme HMAC choisir ?
HMAC-SHA256 est le choix standard, utilisé par presque toutes les API. HMAC-SHA512 convient tout aussi bien et est plus rapide sur les serveurs 64 bits. HMAC-SHA1 reste sûr en tant que HMAC, malgré les collisions SHA-1, mais ne l'utilisez que si un protocole l'impose.
HMAC-SHA1 est-il cassé ?
Non. Les collisions SHA-1 ne permettent pas de forger un HMAC-SHA1 sans la clé, et aucune attaque pratique contre HMAC-SHA1 n'est connue. Il est déconseillé pour les nouveaux systèmes, mais vérifier d'anciennes signatures HMAC-SHA1 reste sûr.
Puis-je calculer un HMAC-MD5 ici ?
Non. La Web Crypto API du navigateur, utilisée par cette page, n'implémente pas MD5. HMAC-MD5 ne subsiste que dans d'anciens protocoles ; utilisez HMAC-SHA256 pour tout ce qui est nouveau.
Quelle longueur doit avoir une clé HMAC ?
Au moins la longueur de la sortie du hachage : 32 octets aléatoires pour HMAC-SHA256, 48 pour SHA-384, 64 pour SHA-512. Le bouton Clé aléatoire génère exactement cela avec le générateur de nombres aléatoires sécurisé de votre navigateur.
Puis-je utiliser une clé vide ?
HMAC l'autorise et le résultat est bien défini, donc l'outil l'affiche, mais une clé vide ou courte n'apporte aucune sécurité. N'importe qui pourrait calculer la même signature.
Ma clé secrète est-elle envoyée quelque part ?
Non. Le HMAC est calculé par la Web Crypto API de votre navigateur, sur cette page. Rien de ce que vous saisissez n'est envoyé ni enregistré.