Générateur HMAC & vérificateur de signature
Générateur et vérificateur HMAC en ligne gratuit. Calculez HMAC-SHA256/SHA1/SHA384/SHA512 avec des clés en texte, hex ou Base64 et une sortie Hex/Base64/Base64URL. 100 % dans votre navigateur — les clés ne quittent jamais la page.
Qu'est-ce qu'un HMAC ?
Un HMAC (Hash-based Message Authentication Code) est une courte étiquette de longueur fixe qui prouve qu'un message est à la fois non modifié et authentique — qu'il a été produit par quelqu'un détenant une clé secrète partagée. Défini dans la RFC 2104 et FIPS 198-1, HMAC combine n'importe quelle fonction de hachage cryptographique avec une clé secrète selon une construction imbriquée précise, écrite HMAC(K, m) = H((K ⊕ opad) ‖ H((K ⊕ ipad) ‖ m)). Le hachage interne lie la clé au message ; le hachage externe enveloppe le résultat, ce qui rend HMAC résistant aux attaques par extension de longueur qui affectent les fonctions SHA-1 et SHA-256 brutes.
HMAC est partout dans l'infrastructure web moderne. Il signe les webhooks pour que vous puissiez confirmer qu'une requête entrante provient bien de GitHub, Stripe, Slack ou Twilio et n'a pas été forgée. Il signe les requêtes d'API (AWS Signature Version 4 repose sur HMAC-SHA256) pour qu'un serveur puisse authentifier l'appelant sans envoyer de mot de passe sur le réseau. C'est le S de HS256 : un JWT signé avec HS256 porte un HMAC-SHA256 sur son en-tête et sa charge utile, que vous pouvez inspecter avec l'encodeur JWT. Il sous-tend aussi la dérivation de clés TLS (HKDF), les algorithmes de mots de passe à usage unique (HOTP/TOTP) et l'intégrité des messages dans d'innombrables services internes.
Cet outil calcule HMAC entièrement dans votre navigateur via crypto.subtle.sign('HMAC', ...) de l'API Web Crypto — la même primitive que les navigateurs utilisent lors des handshakes TLS. Votre clé secrète et votre message ne sont jamais téléversés, c'est donc sûr pour des secrets de signature de production. Comme le même secret peut s'exprimer en texte brut, en hex ou en base64, l'outil vous laisse choisir explicitement l'encodage de la clé, et comme différents fournisseurs attendent l'étiquette sous différentes formes, vous pouvez sortir en Hex, Base64 ou Base64URL. L'onglet Vérifier vous permet de contrôler une signature reçue, à l'aide d'une comparaison en temps constant pour que la vérification elle-même ne révèle aucune information temporelle.
const crypto = require('crypto');
// HMAC-SHA256 with a UTF-8 text key, hex output
const hmac = crypto
.createHmac('sha256', 'my-secret-key')
.update('Hello, World!')
.digest('hex');
console.log(hmac);
// → 'cf3141611e22ea26a9cac6fe41d941274dd6653622c83cba13972d177bd69699'
// Verify a signature in constant time
function verify(message, key, expectedHex) {
const actual = crypto.createHmac('sha256', key).update(message).digest();
const expected = Buffer.from(expectedHex, 'hex');
return actual.length === expected.length &&
crypto.timingSafeEqual(actual, expected);
} Fonctionnalités clés
Générer et vérifier dans un seul outil
Générez une signature dans l'onglet Générer, ou collez un HMAC attendu dans l'onglet Vérifier pour authentifier un webhook ou un jeton entrant. La vérification utilise une comparaison en temps constant, donc le résultat ne révèle jamais d'information temporelle.
Choisir l'encodage de la clé
Interprétez votre secret comme Texte (UTF-8), Hexadécimal ou Base64. C'est le réglage que la plupart des autres outils omettent — et la cause la plus fréquente du calcul de HMAC différents par deux systèmes pour la même clé.
Trois encodages de sortie
Sortez l'étiquette en Hex (webhooks GitHub, AWS), Base64 (Stripe, Twilio, beaucoup d'API) ou Base64URL (JWT et jetons compatibles URL) pour qu'elle corresponde à votre intégration sans conversion manuelle.
Quatre algorithmes natifs
HMAC-SHA256 par défaut, plus SHA-1, SHA-384 et SHA-512. Tous s'exécutent sur l'API Web Crypto du navigateur, donc aucune bibliothèque cryptographique JavaScript à approuver et aucune perte de performance.
100 % côté client et privé
Votre clé secrète et votre message sont traités entièrement dans votre navigateur et ne sont jamais envoyés à un serveur. Ouvrez l'onglet Réseau et vous verrez zéro requête sortante — sûr pour des secrets de signature de production.
Calcul en direct
Le HMAC se recalcule instantanément quand vous modifiez le message, la clé, l'encodage ou l'algorithme — pas d'aller-retour via un bouton Générer, vous pouvez donc expérimenter les encodages jusqu'à ce que votre valeur corresponde à celle du serveur.
Bâti sur des vecteurs testés
La sortie est validée par rapport aux vecteurs de test HMAC officiels de la RFC 4231, vous pouvez donc avoir confiance que les condensés correspondent à ce que produisent OpenSSL, le module crypto de Node et la bibliothèque hmac de Python.
Exemples HMAC
Démarrage rapide — HMAC-SHA256, sortie hex
Hello, World!
cf3141611e22ea26a9cac6fe41d941274dd6653622c83cba13972d177bd69699
Avec la clé « my-secret-key » (encodage de clé = Texte), l'algorithme HMAC-SHA256 et le format de sortie = Hex, le message « Hello, World! » produit cf3141611e22ea26a9cac6fe41d941274dd6653622c83cba13972d177bd69699. C'est le condensé hex canonique de 64 caractères que vous obtenez avec crypto.createHmac('sha256', key).update(msg).digest('hex') de Node.
Vérifier un webhook façon Stripe (sortie Base64)
{"id":42,"event":"user.created"} Cd2f7zTKaJFeG6k+t1FcvDPn51OAZ2f4GrxkCUgMhGs=
De nombreux fournisseurs de webhooks envoient la signature en Base64. Avec la clé « whsec_test_secret » (Texte), HMAC-SHA256 et le format de sortie = Base64, le corps JSON se signe en Cd2f7zTKaJFeG6k+t1FcvDPn51OAZ2f4GrxkCUgMhGs=. Collez cette valeur dans l'onglet Vérifier pour confirmer que la requête provient bien de votre fournisseur avant de la traiter. En interne, HMAC s'appuie sur la même primitive que notre générateur de hash SHA-256, mais avec votre secret comme clé.
Vecteur de référence RFC 4231
what do ya want for nothing?
5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843
Il s'agit du cas de test 2 de la RFC 4231, le document officiel des vecteurs de test HMAC. Avec la clé « Jefe » (Texte), HMAC-SHA256 et sortie Hex, le message « what do ya want for nothing? » donne 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843. Reproduire cette valeur exacte est la façon de prouver qu'une implémentation HMAC est correcte.
HMAC-SHA512 pour un condensé plus long
The quick brown fox
36f44b125a8a90639dc46733039571792e081e0fd8685ff746784b02ed14aa35629d562c7117cde4a701570551faa5a5e1b7ef1eb5c3bcd4cc1fdb8923fcf14e
Passez l'algorithme à HMAC-SHA512 pour un condensé de 128 caractères (512 bits). Avec la clé « key » (Texte) et une sortie Hex, « The quick brown fox » produit la valeur ci-dessus. SHA-512 est plus rapide que SHA-256 sur la plupart du matériel 64 bits et donne une sortie plus grande, même si SHA-256 reste la valeur par défaut pour l'interopérabilité.
Comment générer & vérifier un HMAC
- 1
Choisir l'algorithme
Choisissez HMAC-SHA256 (la valeur par défaut et le bon choix pour presque tous les webhooks, API et JWT), ou passez à SHA-1, SHA-384 ou SHA-512 pour correspondre à un système qui l'exige. Les quatre s'exécutent nativement dans votre navigateur via l'API Web Crypto.
- 2
Saisir la clé secrète et définir son encodage
Tapez ou collez votre clé secrète, puis réglez l'encodage de clé pour correspondre à la façon dont le serveur l'interprète : Texte (UTF-8) pour une chaîne ordinaire, Hex pour un bloc hexadécimal, ou Base64 pour un secret en base64. Se tromper ici est la première cause de désaccords HMAC, alors en cas de doute, essayez les trois.
- 3
Saisir le message
Collez les octets exacts que vous voulez signer — pour un webhook, c'est le corps brut de la requête, octet pour octet, sans re-sérialisation ni modification d'espaces. Le HMAC se recalcule en direct au fil de votre édition, sans rien envoyer à un serveur.
- 4
Choisir le format de sortie et copier
Sélectionnez Hex (façon GitHub), Base64 (façon Stripe/AWS) ou Base64URL (façon JWT) pour correspondre à ce qu'attend votre intégration, puis cliquez sur Copier pour récupérer la signature.
- 5
Vérifier une signature existante
Passez à l'onglet Vérifier, collez le HMAC attendu provenant d'un en-tête ou d'un jeton, et l'outil confirme en temps constant si votre signature calculée correspond — vous pouvez ainsi authentifier une charge utile avant d'agir.
Erreurs HMAC courantes
Mauvais encodage de clé (cause n°1 des non-correspondances)
Le même secret peut être lu comme du texte UTF-8 brut, comme de l'hex ou comme du base64 — et chaque interprétation produit des octets de clé totalement différents, donc le HMAC ne correspondra pas si votre outil et le serveur ne sont pas d'accord. Si un fournisseur vous donne un secret en hex ou en base64, vous devez le décoder en octets avant de signer, et non signer la chaîne telle quelle. Lorsqu'une signature échoue à se vérifier, essayez d'abord la clé avec les trois options d'encodage de clé.
// Server stored a base64 secret but you sign the literal string
createHmac('sha256', 'c2VjcmV0LWtleQ==').update(msg) // Decode the base64 secret to raw bytes first
createHmac('sha256', Buffer.from('c2VjcmV0LWtleQ==', 'base64')).update(msg) Mauvais encodage de sortie
Un HMAC est constitué d'octets bruts ; hex, base64 et base64url ne sont que des encodages texte différents de la même valeur. Si le serveur envoie une signature en base64 et que vous la comparez à votre condensé hex, ils ne correspondront jamais même si les octets sous-jacents sont identiques. Faites correspondre le format de sortie à ce qu'utilise l'en-tête ou le jeton.
// Provider sends base64, you compare hex
expected = 'Cd2f7z...=' // base64
actual = digest('hex') // hex — never matches // Produce the same encoding the provider uses
actual = digest('base64') Signer un JSON re-sérialisé au lieu du corps brut
Les signatures de webhook couvrent les octets exacts que le fournisseur a envoyés. Si vous analysez le JSON puis le re-stringifiez, l'ordre des clés, l'espacement et le formatage des nombres peuvent changer, altérant les octets et cassant la signature. Faites toujours le HMAC sur le corps brut de la requête capturé avant toute analyse.
// Re-serialization changes the bytes body = JSON.stringify(JSON.parse(rawBody)) verify(hmac(body))
// Sign the raw bytes exactly as received verify(hmac(rawBody))
Utiliser == au lieu d'une comparaison en temps constant
Comparer la signature reçue avec == ou une simple égalité de chaînes révèle une information temporelle, car la comparaison s'arrête au premier octet différent. Au fil de nombreuses tentatives, un attaquant peut retrouver une étiquette valide. Utilisez toujours un contrôle d'égalité en temps constant lors de la vérification.
if (received === computed) { /* trust */ } if (crypto.timingSafeEqual(receivedBuf, computedBuf)) { /* trust */ } À quoi sert HMAC
- Vérifier les signatures de webhook
- Des fournisseurs comme GitHub, Stripe, Slack et Twilio signent chaque webhook avec un HMAC sur le corps de la requête et un secret que vous seul partagez. Recalculez l'étiquette et comparez-la à l'en-tête (par exemple X-Hub-Signature-256) pour confirmer que l'événement est authentique avant d'agir. Utilisez l'onglet Vérifier pour le faire sans écrire de code jetable.
- Signer des requêtes d'API
- Les API authentifiées exigent souvent que le client signe la requête par HMAC (méthode, chemin, horodatage, corps) avec un secret partagé plutôt que d'envoyer le secret lui-même. AWS Signature Version 4 en est l'exemple canonique. Cet outil vous permet de reproduire et déboguer ces signatures étape par étape.
- Garantir l'intégrité des messages
- Lorsque vous passez un jeton, un cookie ou un message entre des services, y attacher un HMAC permet au destinataire de détecter toute falsification. Comme l'étiquette dépend d'un secret, un attaquant ne peut pas la recalculer après avoir modifié les données — contrairement à une simple somme de contrôle.
- Comprendre la signature HS256 des JWT
- Un JWT signé avec HS256 est simplement base64url(en-tête) + '.' + base64url(charge utile), signé avec HMAC-SHA256 et le résultat émis en Base64URL. Réglez l'algorithme sur SHA-256 et la sortie sur Base64URL ici pour voir exactement comment cette signature est produite, puis vérifiez-la dans l'encodeur JWT.
- Déboguer une signature qui ne correspond pas
- Quand votre HMAC refuse de correspondre à celui du serveur, cet outil est le moyen le plus rapide d'isoler la cause : essayez la clé en Texte, Hex et Base64, basculez la sortie entre Hex et Base64, et confirmez que vous signez exactement les octets bruts — le tout sans redéployer de code.
Comment fonctionne HMAC
- Construction RFC 2104
- HMAC est défini par H((K ⊕ opad) ‖ H((K ⊕ ipad) ‖ m)), où ipad est l'octet 0x36 répété et opad l'octet 0x5c répété, tous deux à la taille de bloc du hash. Une clé plus longue que la taille de bloc est d'abord hachée ; une clé plus courte est complétée par des zéros. Cette imbrication à deux passes est ce qui confère à HMAC sa preuve de sécurité, laquelle tient même si le hash sous-jacent n'est pas résistant aux collisions.
- Pourquoi un hash à clé l'emporte sur un hash simple
- Un hash simple ne prouve que l'absence de corruption accidentelle des données, car n'importe qui peut le recalculer pour n'importe quel message — y compris un message falsifié. HMAC y mêle un secret, de sorte que seuls les détenteurs de la clé peuvent produire une étiquette valide. Cela transforme la simple intégrité en intégrité plus authenticité, qui est la propriété dont les webhooks et les requêtes signées ont réellement besoin.
- Résistance à l'extension de longueur
- Les SHA-1, SHA-256 et SHA-512 nus sont des hashs Merkle–Damgård vulnérables à l'extension de longueur : à partir de H(secret ‖ msg), un attaquant peut calculer H(secret ‖ msg ‖ extra) sans connaître le secret. Les schémas naïfs de « MAC à préfixe secret » sont cassés par cette attaque. Le hachage externe de HMAC neutralise l'attaque, ce qui est la principale raison d'utiliser HMAC plutôt que de hacher ensemble un secret et un message.
- Choisir SHA-256 ou SHA-512
- HMAC-SHA256 produit une étiquette de 256 bits (64 caractères hex) et constitue la valeur par défaut pour l'interopérabilité — rapide, omniprésente et prise en charge partout. HMAC-SHA512 produit une étiquette de 512 bits (128 caractères hex) et est souvent plus rapide sur les processeurs 64 bits, car SHA-512 utilise des mots de 64 bits. Choisissez SHA-256 sauf si une spécification ou un système pair exige SHA-512 ; les deux sont sûrs pour l'authentification.
- Implémentation Web Crypto
- Cet outil appelle crypto.subtle.importKey pour charger votre clé (décodée depuis Texte, Hex ou Base64) et crypto.subtle.sign('HMAC', ...) pour calculer l'étiquette, puis encode les octets bruts en Hex, Base64 ou Base64URL. C'est la même implémentation native et auditée que le navigateur utilise pour TLS, exécutée en dehors du moteur JavaScript pour plus de rapidité.
Bonnes pratiques HMAC
- Utiliser une clé au moins aussi longue que la sortie du hash
- Pour HMAC-SHA256, utilisez un secret d'au moins 32 octets aléatoires (256 bits) ; pour SHA-512, utilisez-en 64. Une clé courte ou à faible entropie est le maillon faible. Générez les clés depuis une source aléatoire cryptographiquement sûre — jamais un mot de passe ou une chaîne prévisible.
- Toujours comparer les étiquettes en temps constant
- Vérifiez les signatures avec une comparaison en temps constant (crypto.timingSafeEqual en Node, hmac.compare_digest en Python) plutôt qu'avec == ou l'égalité de chaînes. Une comparaison naïve s'arrête dès le premier octet différent, révélant un timing qui peut permettre à un attaquant de retrouver une étiquette valide octet par octet. L'onglet Vérifier de cet outil compare déjà en temps constant.
- Ne jamais journaliser ni exposer la clé secrète
- Tenez les secrets de signature hors des logs, des messages d'erreur, des URL et du code côté client. Stockez-les dans un gestionnaire de secrets ou des variables d'environnement, faites-les tourner périodiquement, et limitez chaque intégration à sa propre clé pour qu'une seule fuite ne compromette pas tout.
- Préférer HMAC-SHA256 ou plus fort
- Optez par défaut pour HMAC-SHA256 ; montez à SHA-384 ou SHA-512 quand un pair l'exige. Évitez HMAC-SHA1 pour les nouveaux systèmes et n'utilisez jamais HMAC-MD5. Même si HMAC tolère mieux un hash plus faible qu'une signature brute, partir d'un hash moderne vous donne la plus grande marge.
- Signer les octets exacts, horodatage inclus
- Signez la charge utile brute et non modifiée — re-sérialiser le JSON ou rogner les espaces change les octets et casse la vérification. Pour la signature de requêtes, incluez un horodatage ou un nonce dans les données signées et rejetez les signatures périmées pour prévenir les attaques par rejeu.
FAQ HMAC
Qu'est-ce qu'un HMAC ?
En quoi un HMAC diffère-t-il d'un simple hash comme SHA-256 ?
Comment vérifier la signature d'un webhook entrant ?
Quel encodage de clé et de sortie mon serveur utilise-t-il ?
HMAC-SHA256 est-il sûr ?
Pourquoi pas de HMAC-MD5 ou HMAC-SHA-3 ici ?
HS256 (HMAC) vs RS256 (RSA) — lequel utiliser pour les JWT ?
Outils connexes
Voir tous les outils →Générateur et vérificateur de hachage Bcrypt
Outils de sécurité
Générez et vérifiez des hachages bcrypt en ligne — coût ajustable, préfixes $2b$/$2a$/$2y$. 100 % dans votre navigateur ; mot de passe jamais envoyé.
Décodeur JWT
Outils de sécurité
Décodez des jetons JWT en ligne avec notre décodeur JWT gratuit. Inspectez en-tête, charge utile, signature, expiration et revendications. 100 % navigateur — votre jeton ne quitte jamais votre appareil. Sans inscription ni suivi.
Encodeur & Générateur JWT
Outils de sécurité
Générateur & encodeur JWT gratuit en ligne. Construisez l'en-tête et la charge utile, signez avec HS256, RS256 ou ES256 instantanément. 100 % navigateur — votre secret et votre clé ne quittent jamais votre appareil.
Générateur de secret JWT gratuit — HS256/384/512
Outils de sécurité
Générez un secret JWT robuste pour HS256/384/512 — 100 % dans votre navigateur, jamais envoyé. base64url, base64 ou hex ; à copier pour .env.
Générateur de Hash MD5 en Ligne et Vérificateur de Checksum
Outils de sécurité
Générez des hashes MD5, SHA-256, SHA-1 et SHA-512 dans votre navigateur. Hachez texte ou fichiers, vérifiez les checksums en un clic. 100 % privé.
Générateur de Mot de Passe — Sécurisé & Personnalisable
Outils de sécurité
Générez des mots de passe forts et sécurisés — gratuit, 100 % dans votre navigateur. Personnalisez longueur et caractères, générez jusqu'à 50.