Skip to content

Générateur de secret JWT gratuit — HS256/384/512

Générez un secret JWT robuste pour HS256/384/512 — 100 % dans votre navigateur, jamais envoyé. base64url, base64 ou hex ; à copier pour .env.

Sans pistage Fonctionne dans le navigateur Gratuit
Votre secret est généré localement avec crypto.getRandomValues et n'est jamais téléversé, journalisé ni stocké. Il reste sur cet appareil.
16 64

Commandes CLI équivalentes

Vérifié pour la justesse de la longueur de clé selon la RFC 7518 §3.2, l'exactitude des encodages RFC 4648 sur base64url / base64 / hex, le sourcing CSPRNG (crypto.getRandomValues, jamais Math.random), la confidentialité sans réseau ni stockage du secret généré, et l'accessibilité (contrôles étiquetés, masquage afficher/masquer, annonces au lecteur d'écran à la génération et à la copie). — Équipe Sécurité Go Tools · 16 juin 2026

Qu'est-ce qu'un générateur de secret JWT ?

Un générateur de secret JWT produit la clé de signature aléatoire qu'utilise un JSON Web Token signé en HMAC pour prouver qu'il n'a pas été falsifié. Lorsque vous signez un jeton avec HS256, HS384 ou HS512, l'algorithme exécute HMAC sur l'en-tête et la charge utile du jeton à l'aide d'un unique secret partagé ; le vérificateur recalcule le même HMAC avec le même secret et n'accepte le jeton que si les signatures correspondent. Toute la sécurité de ce schéma repose sur le fait que le secret soit long et imprévisible — ce qui est exactement ce que cet outil crée : une chaîne aléatoire à haute entropie, générée dans votre navigateur, dimensionnée correctement pour l'algorithme que vous choisissez.

Il vaut la peine d'être précis sur ce que cet outil fait et ne fait pas. Il génère la clé secrète — la valeur que vous mettez dans votre variable d'environnement JWT_SECRET — pas un jeton fini. Si vous voulez assembler un en-tête et une charge utile et les signer en un JWT réel, c'est le travail de l'encodeur JWT ; pour démonter un jeton existant et vérifier sa signature, utilisez le décodeur JWT. Voyez le secret comme la clé et l'encodeur comme la serrure qu'elle actionne : vous générez la clé une fois, la stockez en sécurité, et la réutilisez pour signer et vérifier de nombreux jetons.

Quelle doit être la longueur de la clé ? La réponse est fixée par la spécification, pas par préférence. La RFC 7518 §3.2 — la norme JSON Web Algorithms — exige qu'une clé HMAC soit au moins aussi grande que la sortie de hachage : « Une clé de la même taille que la sortie de hachage (par exemple, 256 bits pour HS256) ou plus grande DOIT être utilisée. » Cela donne un tableau net que le générateur suit automatiquement :

| Algorithme | HMAC | Octets min | Bits min | car. hex | car. base64 | car. base64url | |-----------|------|-----------|----------|-----------|--------------|-----------------| | HS256 | HMAC-SHA-256 | 32 | 256 | 64 | 44 | 43 | | HS384 | HMAC-SHA-384 | 48 | 384 | 96 | 64 | 64 | | HS512 | HMAC-SHA-512 | 64 | 512 | 128 | 88 | 86 |

Les nombres de caractères proviennent des encodages RFC 4648 de ces longueurs d'octets : hex double le nombre d'octets ; base64 augmente de 4⁄3 avec remplissage ; base64url supprime le remplissage, donc une clé de 32 octets fait 43 caractères base64url plutôt que 44. base64url est l'encodage natif de JWT — alphabet compatible URL, sans remplissage — c'est pourquoi c'est la sortie par défaut ici ; un secret en base64url peut se loger dans un en-tête, une URL ou une valeur de configuration sans aucun échappement.

L'aléa est la partie sur laquelle vous ne pouvez pas transiger. Ce générateur tire ses octets de crypto.getRandomValues, le générateur de nombres pseudo-aléatoires cryptographiquement sûr du navigateur, la même primitive qui sous-tend la génération de clés Web Crypto. Il n'utilise jamais Math.random, qui est rapide mais prévisible et totalement inadapté à une clé de signature — un RNG prévisible signifie un secret devinable, et un secret devinable signifie des jetons forgeables. Comme la vérification HMAC se fait localement avec le secret partagé, un attaquant qui capture un jeton peut forcer une clé faible hors ligne sans limite de débit ; des outils comme hashcat (mode 16500) et jwt_tool existent précisément pour cela. Une clé aléatoire de 32 octets à pleine entropie, en revanche, est hors de portée sur le plan calculatoire. La leçon est brutale : n'utilisez jamais un mot de passe, un mot du dictionnaire ou une chaîne saisie à la main comme secret JWT — générez-en un aléatoire.

Enfin, générer la clé côté client est en soi une propriété de sécurité. Un secret de signature ne devrait jamais être transmis à un tiers, pas même au site qui vous aide à le créer. Chaque octet ici est produit et encodé dans votre navigateur ; rien n'est téléversé, journalisé ni stocké. Quand vous êtes prêt à livrer la clé, le bouton Copier pour .env vous remet une ligne JWT_SECRET=…, et si vous avez besoin de l'intégrer dans une configuration plus large, le convertisseur JSON vers .env peut aider. Générez, copiez, stockez-le dans un gestionnaire de secrets — et faites-en la rotation avec un en-tête kid et des fenêtres de validité qui se chevauchent le moment venu.

// The secret you generate here goes straight into your signing code.
// Node.js with jsonwebtoken — the JWT_SECRET env var holds the key.
import jwt from 'jsonwebtoken';

const secret = process.env.JWT_SECRET; // e.g. base64url value from this tool

// Sign a token with HS256 (HMAC-SHA-256).
const token = jwt.sign({ sub: 'user-42', role: 'member' }, secret, {
  algorithm: 'HS256',
  expiresIn: '15m'
});

// Verify it — pin the algorithm to a whitelist; never trust the token's alg.
const payload = jwt.verify(token, secret, { algorithms: ['HS256'] });

// ---------------------------------------------------------------
// Python with PyJWT — same secret, same algorithm pinning.
// import jwt
// token = jwt.encode({"sub": "user-42"}, key, algorithm="HS256")
// payload = jwt.decode(token, key, algorithms=["HS256"])  # whitelist!

// ---------------------------------------------------------------
// Equivalent-strength CLI generation (32 bytes for HS256):
//   openssl rand -base64 32
//   node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))"
//   python -c "import secrets; print(secrets.token_urlsafe(32))"

Fonctionnalités clés

Longueur de clé adaptée à l'algorithme

Choisissez HS256, HS384 ou HS512 et le générateur définit automatiquement la taille de clé minimale de la RFC 7518 §3.2 — 32, 48 ou 64 octets. Vous pouvez demander une clé plus longue, mais vous ne pouvez jamais provisionner par erreur une clé sous-dimensionnée qui violerait la spécification ou qu'une bibliothèque stricte refuserait de signer.

Trois formats de sortie sûrs en texte

Obtenez les mêmes octets aléatoires en base64url (l'encodage natif de JWT, compatible URL, sans remplissage — par défaut), base64 standard ou hex, affichés côte à côte. base64url est la valeur par défaut la plus sûre pour un JWT_SECRET ; changez de format quand un chargeur ou une bibliothèque spécifique en attend un autre. L'entropie est identique pour les trois.

Aléa cryptographiquement sûr

Chaque secret est tiré de crypto.getRandomValues, le CSPRNG du navigateur et la primitive derrière la génération de clés Web Crypto. Jamais Math.random. Cela garantit une clé à pleine entropie sans structure prévisible — la propriété qui place le secret hors de portée de la force brute hors ligne.

Copier pour .env en un clic

Copier pour .env enveloppe la valeur dans l'affectation conventionnelle JWT_SECRET=…, une seule ligne, sans guillemets — prête à coller dans un fichier .env, un secret Docker ou une variable de CI sans retaper le nom de la clé à la main. Le Copier simple récupère le secret brut quand vous n'avez besoin que de la valeur.

Commandes CLI équivalentes

Un panneau affiche les commandes en une ligne correspondantes pour openssl rand, Node crypto.randomBytes et Python secrets selon l'algorithme sélectionné, pour que vous puissiez reproduire une clé de force égale dans un script de provisionnement ou un Dockerfile. La plupart des outils concurrents l'omettent ; ici c'est intégré.

Masquage afficher / masquer

Le secret est masqué par défaut pour qu'il reste hors écran lors d'une démo, d'un tutoriel ou d'un partage d'écran. Révélez-le avec l'icône en forme d'œil uniquement quand vous êtes prêt à le copier. Les actions de copie placent toujours le vrai secret dans le presse-papiers, qu'il soit affiché ou masqué.

100 % privé, dans le navigateur uniquement

Le secret est généré, encodé et affiché entièrement sur votre appareil. Aucune requête réseau, aucune journalisation, aucun stockage — vérifiez-le dans les outils de développement → Réseau. Une clé de signature ne devrait jamais atteindre un tiers, et ici elle ne le fait jamais, ce qui est toute la raison de la générer côté client.

Disponible en 15 langues

L'interface complète — étiquettes, instructions et conseils — est localisée en 15 langues, pour que l'outil soit utilisable et que les conseils de sécurité soient clairs où que travaille votre équipe.

Exemples concrets

Générer un secret HS256 en base64url (par défaut)

Algorithme : HS256 · Format : base64url
3sJ9aFq2kP7mWcZ1xL0nVtRbYdGhU8eAoI4QpNlKj0

HS256 signe avec HMAC-SHA-256, donc la RFC 7518 §3.2 exige une clé d'au moins 32 octets (256 bits). Le générateur tire 32 octets aléatoires cryptographiquement sûrs depuis crypto.getRandomValues et les encode en base64url — l'alphabet sans remplissage et compatible URL qu'utilise JWT lui-même. 32 octets deviennent une chaîne base64url de 43 caractères. Déposez la valeur directement dans JWT_SECRET. Chaque clic régénère un secret neuf ; rien n'est jamais identique deux fois.

Générer un secret HS512 (64 octets / 512 bits)

Algorithme : HS512 · Format : base64url
k2Lp9XqA0mNbVcZ7rT4wYsHfGjUe8RoIdPlNkBvM3xQ1aWtCyZuS6FhEgJ (86 chars)

HS512 utilise HMAC-SHA-512, dont la sortie de hachage fait 64 octets, donc la RFC 7518 §3.2 impose une clé d'au moins 64 octets (512 bits). L'outil détecte l'algorithme et augmente automatiquement le nombre d'octets — vous n'avez jamais à mémoriser le minimum. 64 octets aléatoires s'encodent en une chaîne base64url de 86 caractères, 88 caractères en base64 standard, ou 128 caractères hex. Choisir ici un algorithme plus long est le moyen en un clic de provisionner un secret à plus haute entropie.

Copier le secret sous forme de ligne .env

Cliquez sur « Copier pour .env »
JWT_SECRET=3sJ9aFq2kP7mWcZ1xL0nVtRbYdGhU8eAoI4QpNlKj0

Copier pour .env enveloppe la valeur générée dans l'affectation conventionnelle JWT_SECRET=… pour que vous puissiez la coller directement dans un fichier .env, un secret Docker ou une variable de CI sans retaper le nom de la clé à la main. La valeur reste sur une seule ligne, sans guillemets autour — exactement ce qu'attendent les chargeurs de type dotenv. Besoin de la variable intégrée dans une configuration plus large ? Associez-la au convertisseur JSON vers .env lié ci-dessous.

Reproduire le secret depuis une CLI (force équivalente)

Afficher la commande CLI
openssl rand -base64 32

Le panneau CLI affiche les commandes openssl, Node et Python qui tirent le même nombre d'octets aléatoires sûrs pour l'algorithme sélectionné — openssl rand -base64 32 pour HS256, …48 pour HS384, …64 pour HS512. La sortie est un secret de force égale, pas une chaîne identique octet par octet : openssl émet du base64 standard avec remplissage tandis que cet outil utilise base64url par défaut, donc les alphabets et les caractères de fin diffèrent. Utilisez celle qui convient à votre script de provisionnement ; l'entropie est la même.

Afficher et masquer le secret

Basculez l'icône en forme d'œil
•••••••••••••••••••••••••••••••••••••••••••  ↔  3sJ9aFq2kP7m…

Le secret est masqué par défaut afin qu'il ne puisse pas être lu par-dessus l'épaule ni capturé par un enregistrement d'écran lors d'une démo ou d'un partage d'écran. Cliquez sur l'icône en forme d'œil pour le révéler quand vous êtes prêt à le copier, puis masquez-le à nouveau ensuite. Copier et Copier pour .env fonctionnent que la valeur soit affichée ou masquée — le vrai secret est toujours ce qui atterrit dans votre presse-papiers, jamais les points.

Comment utiliser le générateur de secret JWT

  1. 1

    Choisissez l'algorithme de signature

    Sélectionnez HS256, HS384 ou HS512. Le générateur applique instantanément la longueur de clé minimale de la RFC 7518 §3.2 pour cette variante HMAC — 32, 48 ou 64 octets — pour que vous n'ayez jamais à chercher le nombre ni à risquer une clé sous-dimensionnée.

  2. 2

    Choisissez le format de sortie

    base64url est la valeur par défaut — l'encodage natif de JWT, compatible URL, sans remplissage. Passez à base64 standard si un chargeur l'attend, ou hex quand un système n'accepte que les caractères 0–f. Les trois encodent les mêmes octets aléatoires avec une entropie identique.

  3. 3

    Révélez et copiez le secret

    Le secret est masqué par défaut pour le garder hors écran lors d'une démo ou d'un partage d'écran. Cliquez sur l'icône en forme d'œil pour le révéler, puis Copier pour récupérer la valeur brute ou Copier pour .env pour copier une ligne JWT_SECRET=… prête pour un fichier .env ou une variable de CI.

  4. 4

    Régénérez au besoin

    Cliquez sur Régénérer pour un secret neuf et indépendant tiré de crypto.getRandomValues. Générez-en un par environnement — ne réutilisez jamais la même clé de signature en développement, en préproduction et en production.

  5. 5

    Utilisez l'équivalent CLI ou passez à la signature

    Le panneau CLI affiche les commandes en une ligne correspondantes pour openssl, Node et Python pour un provisionnement scripté. Avec votre secret en main, signez un jeton avec l'encodeur JWT et confirmez la signature avec le décodeur JWT.

Erreurs courantes avec les secrets JWT

Avoir utilisé un mot de passe ou une courte phrase comme secret

Une chaîne choisie par un humain a bien trop peu d'entropie pour une clé de signature et peut être récupérée hors ligne par une attaque par dictionnaire ou par force brute, après quoi n'importe quel jeton peut être forgé. Générez plutôt un secret aléatoire à pleine entropie.

✗ Incorrect
JWT_SECRET=mySuperSecret123  →  low entropy, brute-forceable
✓ Correct
JWT_SECRET=3sJ9aFq2kP7mWcZ1xL0nVtRbYdGhU8eAoI4QpNlKj0  →  32 random bytes

Clé plus courte que ce que l'algorithme exige

La RFC 7518 §3.2 impose une clé HMAC au moins aussi longue que la sortie de hachage. Une clé de 16 octets pour HS256 est sous le plancher de 32 octets — elle affaiblit la signature et certaines bibliothèques la rejettent purement et simplement.

✗ Incorrect
16-byte key with HS256  →  below the 32-byte minimum
✓ Correct
32-byte key with HS256  →  meets RFC 7518 §3.2

Avoir généré la clé avec Math.random

Math.random n'est pas cryptographiquement sûr — sa sortie est prévisible, donc un secret bâti avec lui est devinable et les jetons qu'il signe sont forgeables. Une clé de signature doit provenir d'un CSPRNG comme crypto.getRandomValues.

✗ Incorrect
Math.random()-based key  →  predictable, unsafe
✓ Correct
crypto.getRandomValues key  →  full entropy

Avoir réencodé le secret avant la signature

Stockez et transmettez la chaîne exacte que l'outil a produite. La décoder en octets depuis base64 dans un service mais la traiter comme une chaîne littérale dans un autre donne deux clés différentes aux deux côtés, et chaque contrôle de signature échoue.

✗ Incorrect
Service A: raw string · Service B: base64-decoded  →  signatures never match
✓ Correct
Both services use the identical stored string  →  signatures verify

Avoir réutilisé le même secret sur tous les environnements

Un seul JWT_SECRET partagé par le développement, la préproduction et la production signifie qu'une fuite n'importe où forge des jetons partout et rend la rotation tout ou rien. Provisionnez un secret distinct par environnement.

✗ Incorrect
Same JWT_SECRET in dev, staging, prod  →  one leak breaks all
✓ Correct
A unique secret per environment  →  blast radius contained

Avoir fait confiance à l'alg du jeton à la vérification

Laisser le vérificateur accepter n'importe quel algorithme que le jeton déclare ouvre la voie aux forges alg:none et de confusion HS/RS. Passez une liste blanche d'algorithmes explicite quelle que soit la robustesse du secret.

✗ Incorrect
jwt.verify(token, secret)  →  accepts the token's alg
✓ Correct
jwt.verify(token, secret, { algorithms: ['HS256'] })  →  pinned

Qui utilise cet outil

Provisionner un JWT_SECRET pour un nouveau service
Vous montez une API qui émet des jetons signés en HMAC ? Choisissez l'algorithme qu'utilise votre bibliothèque, copiez le secret sous forme de ligne JWT_SECRET=… et déposez-le dans l'environnement du service. Générez une clé distincte pour le développement, la préproduction et la production — ne partagez jamais un seul secret entre les environnements.
Faire la rotation d'un secret compromis ou vieillissant
Lorsqu'une clé est suspectée d'avoir fuité ou est simplement due pour rotation, générez un secret neuf ici, attribuez-lui un nouveau kid et déployez-le avec une fenêtre de chevauchement pour que les jetons actifs continuent de se vérifier jusqu'à leur expiration. En cas de compromission confirmée, faites la rotation immédiatement et retirez l'ancienne clé de l'ensemble accepté.
Remplacer une clé faible ou saisie à la main
Vous avez hérité d'un code dont le JWT_SECRET est une courte phrase ou une valeur d'exemple copiée ? Cette clé est forçable hors ligne. Générez un remplacement de 32 octets à pleine entropie, échangez-le derrière une fenêtre de rotation et fermez la faille de falsification de jeton avant qu'elle ne soit exploitée.
Scripter la génération de clé dans un pipeline
Vous avez besoin que la clé soit créée en CI ou dans un Dockerfile plutôt qu'à la main ? Utilisez la commande en une ligne openssl, Node ou Python du panneau CLI pour forger un secret de force égale dans votre script de provisionnement, et servez-vous de cette page pour comprendre les longueurs d'octets et les encodages que produit chaque commande.
Enseigner la signature JWT en toute sécurité
Faites découvrir à une équipe le fonctionnement de HS256 sans jamais exposer une vraie clé de production — générez un secret jetable à l'écran (masqué jusqu'à ce que vous le révéliez), signez un jeton d'exemple avec l'encodeur JWT et vérifiez-le avec le décodeur JWT pour que toute la boucle signer-vérifier soit visible.
Comparer les tailles de clé HS256, HS384 et HS512
Vous décidez quelle variante HMAC standardiser ? Basculez entre les algorithmes pour voir comment la longueur de clé requise et la chaîne encodée augmentent — 43, 64 et 86 caractères base64url — et choisissez le compromis robustesse / taille de jeton qui convient à votre système avant de l'inscrire en configuration.
Générer des clés pour le développement local
Vous avez besoin d'un secret rapide et valide pour faire tourner un flux d'authentification local ? Générez-en un en un clic, copiez-le pour .env, et vous êtes débloqué — avec une vraie clé issue d'un CSPRNG plutôt qu'un emplacement réservé que vous oublierez de remplacer avant le déploiement.

Comment fonctionne le générateur

crypto.getRandomValues (CSPRNG)
Les secrets sont générés en remplissant un Uint8Array avec crypto.getRandomValues, le générateur de nombres pseudo-aléatoires cryptographiquement sûr de Web Crypto. C'est la même source d'entropie qui sous-tend la génération de clés Web Crypto. Math.random n'est utilisé nulle part — il est statistiquement prévisible et inapte à toute clé cryptographique.
Dimensionnement de clé selon la RFC 7518 §3.2
Le nombre d'octets par algorithme suit l'exigence JSON Web Algorithms qu'une clé HMAC soit au moins de la taille de la sortie de hachage : 32 octets pour HS256 (SHA-256), 48 pour HS384 (SHA-384), 64 pour HS512 (SHA-512). Choisir l'algorithme fixe le minimum ; le générateur n'émettra pas de clé sous le plancher de la spécification.
Encodages RFC 4648 (base64url / base64 / hex)
Les octets bruts sont encodés avec les alphabets RFC 4648. base64url utilise l'alphabet compatible URL sans remplissage (32 octets → 43 car.), base64 standard utilise +, / et le remplissage = (→ 44 car.), et hex écrit deux caractères par octet (→ 64 car.). Changer de format réencode les mêmes octets — l'entropie sous-jacente est inchangée.
Pourquoi base64url est la valeur par défaut
Les composants JWT sont eux-mêmes encodés en base64url, et l'alphabet compatible URL sans remplissage signifie qu'un secret en base64url n'a jamais besoin d'échappement dans un en-tête, une URL ou un fichier de configuration. Les + et / et le = de fin du base64 standard peuvent casser dans ces contextes, donc base64url est la valeur par défaut prudente pour un JWT_SECRET.
Mise en forme de Copier pour .env
Copier pour .env émet JWT_SECRET= sur une seule ligne sans guillemets autour — la forme que les chargeurs de type dotenv analysent sans modification. Le secret brut n'inclut jamais de caractères qui nécessiteraient des guillemets dans un fichier .env, donc la ligne est sûre à coller telle quelle.
Commandes CLI de force équivalente, pas identiques octet par octet
Les commandes openssl rand -base64 N, Node randomBytes(N).toString('base64url') et Python secrets.token_urlsafe(N) du panneau CLI tirent toutes N octets aléatoires sûrs pour l'algorithme choisi. Elles produisent des clés de force égale, pas la même chaîne — openssl émet du base64 standard avec remplissage, donc l'alphabet et les caractères de fin diffèrent de la valeur par défaut base64url de cet outil.

Bonnes pratiques pour les secrets JWT

Adaptez la longueur de clé à l'algorithme
Utilisez au moins 32 octets pour HS256, 48 pour HS384 et 64 pour HS512, comme l'exige la RFC 7518 §3.2. Ce générateur le fait pour vous, mais si vous dimensionnez une clé à la main, ne descendez jamais sous la longueur de sortie de hachage — une clé HMAC sous-dimensionnée affaiblit la signature et peut être rejetée par les bibliothèques strictes.
Générez toujours avec un CSPRNG, jamais un mot de passe
Un secret JWT est un identifiant de machine que personne n'a besoin de mémoriser, alors dépensez toute l'entropie : utilisez une clé aléatoire cryptographiquement sûre, pas une phrase de passe, un mot du dictionnaire ou une chaîne saisie à la main. Les secrets choisis par un humain sont la cible la plus facile des attaques par force brute hors ligne qu'automatisent les outils de cassage JWT.
Utilisez un secret unique par environnement
Le développement, la préproduction et la production devraient chacun avoir leur propre JWT_SECRET. Partager une seule clé signifie qu'une fuite dans un environnement à faible enjeu forge des jetons partout, et rend la rotation tout ou rien. Générez un secret distinct ici pour chaque environnement et stockez chacun dans sa propre portée de gestionnaire de secrets.
Épinglez l'algorithme à la vérification
Du côté de la vérification, passez toujours une liste blanche d'algorithmes explicite — algorithms: ['HS256'] dans jsonwebtoken, algorithms=["HS256"] dans PyJWT — et ne faites jamais confiance au champ alg à l'intérieur du jeton. Accepter l'algorithme auto-déclaré du jeton ouvre la voie aux attaques classiques de confusion d'alg et de forge alg:none, quelle que soit la robustesse de votre secret.
Faites la rotation avec un en-tête kid et des clés qui se chevauchent
Étiquetez les jetons signés avec un identifiant de clé (kid) et publiez les clés actives via un point de terminaison JWKS pour pouvoir faire la rotation sans interruption : signez les nouveaux jetons avec la nouvelle clé tout en acceptant encore l'ancienne jusqu'à l'expiration de ses jetons. En cas de compromission suspectée, sautez le chevauchement et révoquez l'ancienne clé immédiatement.

Foire aux questions

Mon secret JWT généré est-il envoyé à votre serveur ?
Non. Le secret est généré entièrement dans votre navigateur avec crypto.getRandomValues, le générateur de nombres aléatoires cryptographiquement sûr de la plateforme. Les octets sont produits sur votre appareil, encodés localement, et affichés uniquement pour vous. Rien n'est téléversé, rien n'est journalisé, rien n'est écrit sur le disque, et rien n'est envoyé à un tiers — ouvrez les outils de développement → Réseau et vous verrez zéro requête se déclencher lorsque vous cliquez sur Régénérer ou Copier. Cela signifie qu'une clé que vous générez ici n'appartient qu'à vous dès l'instant où elle apparaît ; aucun serveur ne l'observe jamais. C'est tout l'intérêt de générer un secret de signature côté client plutôt que sur un site web qui pourrait, en principe, conserver une copie de chaque clé qu'il distribue.
Comment générer un secret JWT sécurisé ?
Trois étapes. D'abord, choisissez l'algorithme de signature qu'utilise votre application — HS256, HS384 ou HS512 — et le générateur dimensionne aussitôt la clé au minimum de la RFC 7518 §3.2 pour cette variante (32, 48 ou 64 octets), pour que vous n'ayez jamais à choisir un nombre à la main ni à risquer une clé sous-dimensionnée. Ensuite, laissez l'encodage sur base64url (le format natif et compatible URL de JWT) ou passez à base64 ou hex si votre chargeur de configuration attend l'un d'eux. Enfin, cliquez sur Copier — ou Copier pour .env pour obtenir une ligne JWT_SECRET=… prête à coller — et stockez la valeur dans un gestionnaire de secrets ou une variable d'environnement, jamais dans le contrôle de version. Comme chaque octet provient de crypto.getRandomValues, une clé de 32 octets porte déjà 256 bits d'entropie, bien hors de portée des attaques par force brute hors ligne qui cassent les secrets choisis par un humain. Vous préférez la ligne de commande ? L'outil affiche aussi les commandes équivalentes en une ligne pour openssl, Node et Python que vous pouvez coller dans un terminal.
Quelle doit être la longueur d'un secret JWT HS256 ?
Au moins 32 octets (256 bits). La RFC 7518 §3.2 — la spécification JSON Web Algorithms — indique que pour les signatures HMAC « une clé de la même taille que la sortie de hachage (par exemple, 256 bits pour HS256) ou plus grande DOIT être utilisée ». HS256 signe avec HMAC-SHA-256 (hachage de 256 bits), donc la clé minimale est de 32 octets ; HS384 utilise HMAC-SHA-384 et nécessite au moins 48 octets (384 bits) ; HS512 utilise HMAC-SHA-512 et nécessite au moins 64 octets (512 bits). Ce générateur choisit automatiquement le bon minimum lorsque vous choisissez l'algorithme, et vous pouvez demander une clé plus longue. Une clé plus courte n'est pas seulement plus faible — elle viole la spécification et certaines bibliothèques refuseront de signer avec elle.
Quelle est la différence entre base64url, base64 et hex, et lequel choisir ?
Les trois encodent les mêmes octets aléatoires ; ils ne diffèrent que par l'alphabet de caractères, pas par l'entropie. base64url est l'encodage natif de JWT — il utilise un alphabet compatible URL (- et _ au lieu de + et /) et omet le remplissage, donc il n'a jamais besoin d'échappement dans un jeton, une URL ou un en-tête. C'est pourquoi c'est la valeur par défaut ici. Le base64 standard utilise +, / et le remplissage = ; choisissez-le quand un chargeur de configuration ou une bibliothèque attend spécifiquement du base64 classique. hex (base16) écrit chaque octet sous forme de deux caractères 0–f, produisant une chaîne plus longue mais sans ambiguïté, pratique quand un système rejette les caractères non alphanumériques. Pour une variable d'environnement JWT_SECRET, base64url est la valeur par défaut la plus sûre ; n'importe lequel des trois fonctionne tant que vous stockez la chaîne exacte et la transmettez inchangée à votre bibliothèque de signature.
Un secret JWT faible peut-il être cassé ?
Oui — et c'est le plus grand risque des JWT signés en HMAC. Comme HS256/384/512 utilisent un unique secret partagé, quiconque détient un jeton peut lancer une attaque par force brute ou par dictionnaire hors ligne contre la signature, sans limite de débit ni contact avec le serveur. Des outils comme hashcat (le mode 16500 cible JWT) et jwt_tool sont conçus précisément pour cela ; sur des GPU grand public, un secret à faible entropie peut typiquement tomber en quelques secondes à quelques heures, et un mot du dictionnaire ou un mot de passe divulgué peut tomber presque immédiatement. Une clé aléatoire de 32 octets à pleine entropie issue de ce générateur est bien hors de portée de la force brute. Une fois qu'un attaquant récupère le secret, il peut forger n'importe quel jeton — y compris un qui revendique des privilèges admin — donc la robustesse du secret n'est pas optionnelle. Générez la clé de signature avec un CSPRNG, jamais une chaîne choisie par un humain. Pour un traitement plus approfondi des attaques par secret faible, par confusion d'alg et par rejeu de jeton, consultez notre guide des bonnes pratiques de sécurité JWT.
Puis-je utiliser un mot de passe comme secret JWT ?
Vous le pouvez, mais vous ne devriez pas. Un mot de passe mémorisable par un humain — même une longue phrase de passe — porte bien moins d'entropie que 32 octets aléatoires, ce qui en fait une cible réaliste pour les attaques par force brute et par dictionnaire hors ligne décrites ci-dessus. Les secrets JWT sont des identifiants de machine à machine ; personne n'a besoin de les mémoriser, donc il n'y a aucune raison de troquer l'entropie contre la facilité de mémorisation. Générez un secret aléatoire ici, stockez-le dans un gestionnaire de secrets ou une variable d'environnement, et laissez votre application le lire. Si vous avez besoin d'identifiants mémorisables à une autre fin, c'est le travail d'un générateur de mot de passe ou, pour stocker des mots de passe d'utilisateurs, d'un hachage à sens unique du générateur bcrypt — pas d'une clé de signature de jeton.
Comment faire une rotation de secret JWT sans casser les jetons actifs ?
Effectuez la rotation avec chevauchement plutôt qu'un basculement brutal. Ajoutez un identifiant de clé (l'en-tête kid) aux jetons que vous signez pour qu'un vérificateur sache contre quel secret contrôler, et publiez vos clés actives — généralement via un point de terminaison JWKS que lisent vos services. Pour faire la rotation : générez un nouveau secret ici, commencez à signer les nouveaux jetons avec le nouveau kid tout en acceptant encore la clé précédente pour la vérification, et ne retirez l'ancienne clé qu'après l'expiration de tous les jetons signés avec elle. Cette fenêtre de chevauchement garantit qu'aucune session valide n'est invalidée en cours de route. En cas de compromission suspectée, sautez le chevauchement progressif : faites la rotation immédiatement, retirez l'ancienne clé de l'ensemble accepté et forcez une réauthentification pour que les jetons divulgués cessent aussitôt de se vérifier.
En quoi une clé HMAC (HS*) diffère-t-elle d'une clé RSA ou ECDSA (RS*/ES*) ?
Elles résolvent le même problème avec des modèles de clé opposés. HS256/384/512 sont des algorithmes HMAC : ils utilisent un unique secret symétrique — le type que cet outil génère — qui à la fois signe et vérifie, donc toute partie capable de vérifier un jeton peut aussi en forger un. C'est simple, rapide et idéal quand un seul service émet et contrôle ses propres jetons. RS* (RSA) et ES* (ECDSA) sont asymétriques : ils utilisent une paire de clés, où une clé privée signe et une clé publique distincte vérifie seulement. Vous remettez la clé publique à quiconque doit valider des jetons sans jamais exposer la clé de signature — le bon choix quand un fournisseur d'identité émet des jetons que de nombreux services indépendants vérifient. Ce générateur produit uniquement des secrets symétriques HMAC. Pour assembler et signer un jeton réel avec la clé que vous générez, utilisez l'encodeur JWT ; pour en inspecter et en vérifier un, utilisez le décodeur JWT.

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 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.

Générateur SHA-1 (160 bits, usage hérité)

Outils de sécurité

Générez des hashes SHA-1 dans votre navigateur — sortie hex de 40 caractères, sans envoi. Outil hérité pour les empreintes Git, contrôles de certificats anciens et audits de migration. Données jamais transmises.