Generatore di segreti JWT — HS256/384/512
Genera online un segreto JWT robusto e conforme alle RFC per HS256/384/512 — 100% nel tuo browser, mai inviato a un server. base64url, base64 o hex.
Comandi CLI equivalenti
Cos'è un generatore di segreti JWT?
Un generatore di segreti JWT produce la chiave di firma casuale che un JSON Web Token firmato tramite HMAC usa per dimostrare di non essere stato manomesso. Quando firmi un token con HS256, HS384 o HS512, l'algoritmo esegue HMAC sull'header e sul payload del token usando un singolo segreto condiviso; il verificatore ricalcola lo stesso HMAC con lo stesso segreto e accetta il token solo se le firme coincidono. L'intera sicurezza di questo schema poggia sul fatto che il segreto sia lungo e imprevedibile — che è esattamente ciò che questo strumento crea: una stringa casuale ad alta entropia, generata nel tuo browser, dimensionata correttamente per l'algoritmo che scegli.
Vale la pena essere precisi su ciò che questo strumento fa e non fa. Genera la chiave segreta — il valore che metti nella tua variabile d'ambiente JWT_SECRET — non un token finito. Se vuoi assemblare un header e un payload e firmarli in un JWT reale, è il compito del Codificatore JWT; per smontare un token esistente e verificarne la firma, usa il Decodificatore JWT. Pensa al segreto come alla chiave e al codificatore come alla serratura che essa aziona: generi la chiave una volta, la conservi al sicuro e la riutilizzi per firmare e verificare molti token.
Quanto deve essere lunga la chiave? La risposta è fissata dalla specifica, non dalle preferenze. La RFC 7518 §3.2 — lo standard JSON Web Algorithms — richiede che una chiave HMAC sia almeno grande quanto l'output di hash: "A key of the same size as the hash output (for instance, 256 bits for HS256) or larger MUST be used." Questo dà una tabella pulita che il generatore segue automaticamente:
| Algorithm | HMAC | Min bytes | Min bits | hex chars | base64 chars | base64url chars | |-----------|------|-----------|----------|-----------|--------------|-----------------| | 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 |
I conteggi dei caratteri derivano dalle codifiche RFC 4648 di quelle lunghezze in byte: hex raddoppia il conteggio dei byte; base64 si espande di 4⁄3 con il padding; base64url elimina il padding, così una chiave di 32 byte è di 43 caratteri base64url anziché 44. base64url è la codifica nativa di JWT — alfabeto URL-safe, nessun padding — ed è per questo che è l'output predefinito qui; un segreto in base64url può stare in un header, in un URL o in un valore di configurazione senza escaping.
La casualità è la parte su cui non puoi scendere a compromessi. Questo generatore estrae i suoi byte da crypto.getRandomValues, il generatore di numeri pseudo-casuali crittograficamente sicuro del browser, la stessa primitiva che sta dietro la generazione di chiavi di Web Crypto. Non usa mai Math.random, che è veloce ma prevedibile e del tutto inadatto a una chiave di firma — un RNG prevedibile significa un segreto indovinabile, e un segreto indovinabile significa token forgiabili. Poiché la verifica HMAC avviene localmente con il segreto condiviso, un attaccante che cattura un token può forzare una chiave debole offline senza alcun rate limit; strumenti come hashcat (modalità 16500) e jwt_tool esistono proprio per fare questo. Una chiave casuale di 32 byte a piena entropia, invece, è computazionalmente fuori portata. La lezione è netta: non usare mai una password, una parola di dizionario o una stringa digitata a mano come segreto JWT — generane uno casuale.
Infine, generare la chiave lato client è di per sé una proprietà di sicurezza. Un segreto di firma non dovrebbe mai essere trasmesso a una terza parte, nemmeno al sito che ti aiuta a crearlo. Ogni byte qui viene prodotto e codificato nel tuo browser; nulla viene caricato, registrato o memorizzato. Quando sei pronto a distribuire la chiave, il pulsante Copia per .env ti consegna una riga JWT_SECRET=…, e se hai bisogno di inserirla in una configurazione più ampia il convertitore JSON to .env può aiutarti. Genera, copia, conservala in un gestore di segreti — e ruotala con un header kid e finestre di validità sovrapposte quando arriva il momento.
// 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))" Caratteristiche principali
Lunghezza della chiave consapevole dell'algoritmo
Scegli HS256, HS384 o HS512 e il generatore imposta automaticamente la dimensione minima della chiave della RFC 7518 §3.2 — 32, 48 o 64 byte. Puoi richiedere una chiave più lunga, ma non puoi mai predisporre per errore una chiave sottodimensionata che viola la specifica o che una libreria rigorosa si rifiuterà di firmare.
Tre formati di output sicuri per il testo
Ottieni gli stessi byte casuali come base64url (la codifica nativa, URL-safe e senza padding di JWT — il valore predefinito), base64 standard o hex, mostrati affiancati. base64url è il valore predefinito più sicuro per un JWT_SECRET; cambia formato quando un loader o una libreria specifici ne richiedono un altro. L'entropia è identica tra tutti e tre.
Casualità crittograficamente sicura
Ogni segreto è estratto da crypto.getRandomValues, il CSPRNG del browser e la primitiva dietro la generazione di chiavi di Web Crypto. Mai Math.random. Questo garantisce una chiave a piena entropia senza struttura prevedibile — la proprietà che pone il segreto oltre la portata del brute-force offline.
Copia per .env con un clic
Copia per .env racchiude il valore nella consueta assegnazione JWT_SECRET=…, una riga, senza virgolette — pronta da incollare in un file .env, un Docker secret o una variabile CI senza digitare a mano il nome della chiave. Copia semplice prende il segreto grezzo quando ti serve solo il valore.
Comandi CLI equivalenti
Un pannello stampa le corrispondenti one-liner openssl rand, Node crypto.randomBytes e Python secrets per l'algoritmo selezionato, così puoi riprodurre una chiave di pari robustezza in uno script di provisioning o in un Dockerfile. La maggior parte degli strumenti concorrenti lo omette; qui è integrato.
Mascheramento mostra / nascondi
Il segreto è mascherato per impostazione predefinita così resta fuori dallo schermo durante una demo, un tutorial o una condivisione schermo. Rivelalo con l'icona dell'occhio solo quando sei pronto a copiarlo. Le azioni di copia mettono sempre il segreto reale negli appunti, sia che sia mostrato sia che sia nascosto.
100% privato, solo nel browser
Il segreto viene generato, codificato e visualizzato interamente sul tuo dispositivo. Nessuna richiesta di rete, nessun log, nessuna memorizzazione — verificalo in DevTools → Network. Una chiave di firma non dovrebbe mai raggiungere una terza parte, e qui non accade mai, che è l'intera ragione per generarla lato client.
Disponibile in 15 lingue
L'intera interfaccia — etichette, istruzioni e indicazioni — è localizzata in 15 lingue, così lo strumento è utilizzabile e i consigli di sicurezza sono chiari ovunque lavori il tuo team.
Esempi pratici
Genera un segreto HS256 in base64url (il valore predefinito)
Algorithm: HS256 · Format: base64url
3sJ9aFq2kP7mWcZ1xL0nVtRbYdGhU8eAoI4QpNlKj0
HS256 firma con HMAC-SHA-256, quindi la RFC 7518 §3.2 richiede una chiave di almeno 32 byte (256 bit). Il generatore estrae 32 byte casuali e crittograficamente sicuri da crypto.getRandomValues e li codifica in base64url — l'alfabeto URL-safe e senza padding che JWT stesso usa. 32 byte diventano una stringa base64url di 43 caratteri. Inserisci il valore direttamente in JWT_SECRET. Ogni clic rigenera un nuovo segreto; nulla è mai uguale due volte.
Genera un segreto HS512 (64 byte / 512 bit)
Algorithm: HS512 · Format: base64url
k2Lp9XqA0mNbVcZ7rT4wYsHfGjUe8RoIdPlNkBvM3xQ1aWtCyZuS6FhEgJ (86 chars)
HS512 usa HMAC-SHA-512, il cui output di hash è di 64 byte, quindi la RFC 7518 §3.2 impone una chiave di almeno 64 byte (512 bit). Lo strumento rileva l'algoritmo e aumenta automaticamente il numero di byte — non devi mai ricordare il minimo. 64 byte casuali si codificano in una stringa base64url di 86 caratteri, 88 caratteri in base64 standard o 128 caratteri hex. Scegliere qui un algoritmo più lungo è il modo con un clic per predisporre un segreto a entropia più elevata.
Copia il segreto come riga .env
Click "Copy for .env"
JWT_SECRET=3sJ9aFq2kP7mWcZ1xL0nVtRbYdGhU8eAoI4QpNlKj0
Copia per .env racchiude il valore generato nella consueta assegnazione JWT_SECRET=… così puoi incollarlo direttamente in un file .env, un Docker secret o una variabile CI senza digitare a mano il nome della chiave. Il valore resta su una sola riga, senza virgolette — esattamente ciò che i loader in stile dotenv si aspettano. Hai bisogno della variabile inserita in una configurazione più ampia? Abbinalo al convertitore JSON to .env collegato qui sotto.
Riproduci il segreto da una CLI (stessa robustezza)
Show the CLI command
openssl rand -base64 32
Il pannello CLI stampa i comandi openssl, Node e Python che estraggono lo stesso numero di byte casuali sicuri per l'algoritmo selezionato — openssl rand -base64 32 per HS256, …48 per HS384, …64 per HS512. L'output è un segreto di pari robustezza, non una stringa identica byte per byte: openssl emette base64 standard con padding mentre questo strumento usa per impostazione predefinita base64url, quindi gli alfabeti e i caratteri finali differiscono. Usa quello che si adatta al tuo script di provisioning; l'entropia è la stessa.
Mostra e nascondi il segreto
Toggle the eye icon
••••••••••••••••••••••••••••••••••••••••••• ↔ 3sJ9aFq2kP7m…
Il segreto è mascherato per impostazione predefinita così non può essere sbirciato alle spalle o catturato da una registrazione dello schermo durante una demo o una condivisione schermo. Fai clic sull'icona dell'occhio per rivelarlo quando sei pronto a copiarlo, e nascondilo di nuovo dopo. Copia e Copia per .env funzionano sia che il valore sia mostrato sia che sia mascherato — il segreto reale è sempre ciò che finisce nei tuoi appunti, mai i puntini.
Come usare il generatore di segreti JWT
- 1
Scegli l'algoritmo di firma
Seleziona HS256, HS384 o HS512. Il generatore applica all'istante la lunghezza minima della chiave della RFC 7518 §3.2 per quella variante HMAC — 32, 48 o 64 byte — così non devi mai cercare il numero né rischi una chiave sottodimensionata.
- 2
Scegli il formato di output
base64url è il valore predefinito — la codifica nativa, URL-safe e senza padding di JWT. Passa a base64 standard se un loader lo richiede, o a hex quando un sistema accetta solo i caratteri 0–f. Tutti e tre codificano gli stessi byte casuali con entropia identica.
- 3
Rivela e copia il segreto
Il segreto è mascherato per impostazione predefinita per tenerlo fuori dallo schermo durante una demo o una condivisione schermo. Fai clic sull'icona dell'occhio per rivelarlo, poi Copia per prendere il valore grezzo o Copia per .env per copiare una riga JWT_SECRET=… pronta per un file .env o una variabile CI.
- 4
Rigenera all'occorrenza
Fai clic su Rigenera per un segreto nuovo e indipendente estratto da crypto.getRandomValues. Generane uno per ogni ambiente — non riutilizzare mai la stessa chiave di firma tra sviluppo, staging e produzione.
- 5
Usa l'equivalente CLI o passa alla firma
Il pannello CLI mostra le corrispondenti one-liner openssl, Node e Python per il provisioning tramite script. Con il tuo segreto in mano, firma un token con il Codificatore JWT e conferma la firma con il Decodificatore JWT.
Errori comuni con i segreti JWT
Usata una password o una frase breve come segreto
Una stringa scelta da un essere umano ha troppa poca entropia per una chiave di firma e può essere recuperata offline con un attacco a dizionario o brute-force, dopodiché qualsiasi token può essere forgiato. Genera invece un segreto casuale a piena entropia.
JWT_SECRET=mySuperSecret123 → low entropy, brute-forceable
JWT_SECRET=3sJ9aFq2kP7mWcZ1xL0nVtRbYdGhU8eAoI4QpNlKj0 → 32 random bytes
Chiave più corta di quanto richiede l'algoritmo
La RFC 7518 §3.2 impone una chiave HMAC lunga almeno quanto l'output di hash. Una chiave di 16 byte per HS256 è sotto la soglia di 32 byte — indebolisce la firma e alcune librerie la rifiutano del tutto.
16-byte key with HS256 → below the 32-byte minimum
32-byte key with HS256 → meets RFC 7518 §3.2
Generata la chiave con Math.random
Math.random non è crittograficamente sicuro — il suo output è prevedibile, quindi un segreto costruito a partire da esso è indovinabile e i token che firma sono forgiabili. Una chiave di firma deve provenire da un CSPRNG come crypto.getRandomValues.
Math.random()-based key → predictable, unsafe
crypto.getRandomValues key → full entropy
Ricodificato il segreto prima di firmare
Conserva e fornisci la stringa esatta prodotta dallo strumento. Decodificarla in base64 in byte in un servizio ma trattarla come stringa letterale in un altro dà ai due lati chiavi diverse, e ogni controllo di firma fallisce.
Service A: raw string · Service B: base64-decoded → signatures never match
Both services use the identical stored string → signatures verify
Riutilizzato lo stesso segreto in tutti gli ambienti
Un solo JWT_SECRET condiviso da dev, staging e produzione significa che una fuga ovunque forgia token ovunque e la rotazione diventa tutto-o-niente. Predisponi un segreto distinto per ogni ambiente.
Same JWT_SECRET in dev, staging, prod → one leak breaks all
A unique secret per environment → blast radius contained
Fidato dell'alg del token in fase di verifica
Lasciare che il verificatore accetti qualunque algoritmo dichiari il token abilita le forgiature alg:none e di confusione HS/RS. Passa una whitelist esplicita di algoritmi per quanto robusto sia il segreto.
jwt.verify(token, secret) → accepts the token's alg
jwt.verify(token, secret, { algorithms: ['HS256'] }) → pinned Chi usa questo strumento
- Predisponi un JWT_SECRET per un nuovo servizio
- Stai avviando un'API che emette token firmati tramite HMAC? Scegli l'algoritmo usato dalla tua libreria, copia il segreto come riga JWT_SECRET=… e inseriscilo nell'ambiente del servizio. Genera una chiave distinta per sviluppo, staging e produzione — non condividere mai un solo segreto tra gli ambienti.
- Ruota un segreto compromesso o datato
- Quando una chiave è sospettata trafugata o semplicemente da rinnovare, genera qui un nuovo segreto, assegnagli un nuovo kid e distribuiscilo con una finestra di sovrapposizione così i token attivi continuano a verificarsi finché non scadono. In caso di compromissione confermata, ruota immediatamente e rimuovi la vecchia chiave dall'insieme accettato.
- Sostituisci una chiave debole o digitata a mano
- Hai ereditato una codebase il cui JWT_SECRET è una frase breve o un valore di esempio copiato? Quella chiave è forzabile offline. Genera una sostituzione casuale di 32 byte a piena entropia, sostituiscila dietro una finestra di rotazione e chiudi la falla di forgiatura dei token prima che venga sfruttata.
- Genera la chiave tramite script in una pipeline
- Hai bisogno che la chiave venga creata in CI o in un Dockerfile anziché a mano? Usa la one-liner openssl, Node o Python del pannello CLI per coniare un segreto di pari robustezza all'interno del tuo script di provisioning, e usa questa pagina per capire le lunghezze in byte e le codifiche che ogni comando produce.
- Insegna la firma JWT in sicurezza
- Guida un team attraverso il funzionamento di HS256 senza mai esporre una vera chiave di produzione — genera un segreto usa e getta sullo schermo (mascherato finché non lo riveli), firma un token di esempio con il Codificatore JWT e verificalo con il Decodificatore JWT così l'intero ciclo di firma e verifica è visibile.
- Confronta le dimensioni delle chiavi HS256, HS384 e HS512
- Stai decidendo su quale variante HMAC standardizzarti? Passa tra gli algoritmi per vedere come crescono la lunghezza della chiave richiesta e la stringa codificata — 43, 64 e 86 caratteri base64url — e scegli il compromesso robustezza-dimensione del token che si adatta al tuo sistema prima di fissarlo nella configurazione.
- Genera chiavi per lo sviluppo locale
- Hai bisogno di un segreto rapido e valido per far funzionare un flusso di autenticazione locale? Generane uno con un clic, copialo per .env e sei sbloccato — con una vera chiave CSPRNG anziché un segnaposto che dimenticherai di sostituire prima del deploy.
Come funziona il generatore
- crypto.getRandomValues (CSPRNG)
- I segreti sono generati riempiendo un Uint8Array con crypto.getRandomValues, il generatore di numeri pseudo-casuali crittograficamente sicuro di Web Crypto. È la stessa fonte di entropia che sta dietro la generazione di chiavi di Web Crypto. Math.random non viene mai usato da nessuna parte — è statisticamente prevedibile e inadatto a qualsiasi chiave crittografica.
- Dimensionamento delle chiavi RFC 7518 §3.2
- Il conteggio dei byte per algoritmo segue il requisito di JSON Web Algorithms secondo cui una chiave HMAC sia almeno della dimensione dell'output di hash: 32 byte per HS256 (SHA-256), 48 per HS384 (SHA-384), 64 per HS512 (SHA-512). Selezionare l'algoritmo imposta il minimo; il generatore non emetterà una chiave sotto la soglia della specifica.
- Codifiche RFC 4648 (base64url / base64 / hex)
- I byte grezzi sono codificati con gli alfabeti RFC 4648. base64url usa l'alfabeto URL-safe senza padding (32 byte → 43 caratteri), base64 standard usa il padding +, / e = (→ 44 caratteri), e hex scrive due caratteri per byte (→ 64 caratteri). Cambiare formato ricodifica gli stessi byte — l'entropia sottostante è invariata.
- Perché base64url è il valore predefinito
- I componenti JWT sono essi stessi codificati in base64url, e l'alfabeto URL-safe senza padding significa che un segreto in base64url non ha mai bisogno di escaping in un header, in un URL o in un file di configurazione. Il +, il / e il = finale di base64 standard possono creare problemi in quei contesti, quindi base64url è il valore predefinito conservativo per un JWT_SECRET.
- Formattazione di Copia per .env
- Copia per .env emette JWT_SECRET=
su una singola riga senza virgolette — la forma che i loader in stile dotenv analizzano senza modifiche. Il segreto grezzo non include mai caratteri che richiederebbero virgolette in un file .env, quindi la riga è sicura da incollare così com'è. - Comandi CLI di pari robustezza, non identici byte per byte
- I comandi openssl rand -base64 N, Node randomBytes(N).toString('base64url') e Python secrets.token_urlsafe(N) del pannello CLI estraggono tutti N byte casuali sicuri per l'algoritmo scelto. Producono chiavi di pari robustezza, non la stessa stringa — openssl emette base64 standard con padding, quindi l'alfabeto e i caratteri finali differiscono dal valore predefinito base64url di questo strumento.
Buone pratiche per i segreti JWT
- Adatta la lunghezza della chiave all'algoritmo
- Usa almeno 32 byte per HS256, 48 per HS384 e 64 per HS512, come richiede la RFC 7518 §3.2. Questo generatore lo fa per te, ma se dimensioni una chiave a mano, non scendere mai sotto la lunghezza dell'output di hash — una chiave HMAC sottodimensionata indebolisce la firma e può essere rifiutata da librerie rigorose.
- Genera sempre con un CSPRNG, mai una password
- Un segreto JWT è una credenziale da macchina che nessuno deve memorizzare, quindi spendi l'intera entropia: usa una chiave casuale crittograficamente sicura, non una passphrase, una parola di dizionario o una stringa digitata a mano. I segreti scelti dagli esseri umani sono il bersaglio più facile per gli attacchi brute-force offline che gli strumenti di cracking JWT automatizzano.
- Usa un segreto unico per ogni ambiente
- Sviluppo, staging e produzione dovrebbero avere ciascuno il proprio JWT_SECRET. Condividere una sola chiave significa che una fuga in un ambiente a basso rischio forgia token ovunque, e rende la rotazione tutto-o-niente. Genera qui un segreto separato per ogni ambiente e conserva ciascuno nel proprio ambito del gestore di segreti.
- Fissa l'algoritmo quando verifichi
- Sul lato della verifica, passa sempre una whitelist esplicita di algoritmi — algorithms: ['HS256'] in jsonwebtoken, algorithms=["HS256"] in PyJWT — e non fidarti mai del campo alg all'interno del token. Accettare l'algoritmo auto-dichiarato dal token abilita i classici attacchi di forgiatura alg-confusion e alg:none, indipendentemente da quanto sia robusto il tuo segreto.
- Ruota con un header kid e chiavi sovrapposte
- Etichetta i token firmati con un identificatore di chiave (kid) e pubblica le chiavi attive tramite un endpoint JWKS così puoi ruotare senza downtime: firma i nuovi token con la nuova chiave continuando ad accettare la vecchia finché i suoi token non scadono. In caso di sospetta compromissione, salta la sovrapposizione e revoca immediatamente la vecchia chiave.
Domande frequenti
Il mio segreto JWT generato viene inviato al vostro server?
Come genero un segreto JWT sicuro?
Quanto deve essere lungo un segreto JWT HS256?
Qual è la differenza tra base64url, base64 e hex, e quale dovrei scegliere?
Un segreto JWT debole può essere violato?
Posso usare una password come segreto JWT?
Come ruoto un segreto JWT senza rompere i token attivi?
In cosa differisce una chiave HMAC (HS*) da una chiave RSA o ECDSA (RS*/ES*)?
Strumenti correlati
Vedi tutti gli strumenti →Generatore e verificatore di hash Bcrypt
Strumenti di sicurezza
Genera e verifica hash bcrypt delle password online: costo regolabile, prefissi $2b$/$2a$/$2y$. 100% nel tuo browser; la password non viene mai caricata.
Decodificatore JWT
Strumenti di sicurezza
Decodifica token JWT online con il nostro decodificatore JWT gratis. Ispeziona intestazione, payload, firma, scadenza e attestazioni. 100% browser — token mai fuori dal dispositivo. Nessuna registrazione, nessun tracciamento.
Codificatore e Generatore JWT
Strumenti di sicurezza
Generatore JWT online gratis. Costruisci header e payload, firma con HS256, RS256 o ES256 all'istante nel browser; segreto e chiave non lasciano il dispositivo.
Generatore Hash MD5 e Strumento Checksum File
Strumenti di sicurezza
Genera hash MD5, SHA-256, SHA-1 e SHA-512 online gratis. Calcola l'hash di testo o file nel browser, verifica checksum e copia i risultati. Senza registrazione.
Generatore di Password Casuali — Personalizzabile e Sicuro
Strumenti di sicurezza
Genera password casuali sicure all'istante — gratis, 100% nel tuo browser. Personalizza lunghezza e caratteri, batch fino a 50 con analisi entropia.
Generatore Hash SHA-1 (Legacy 160-bit)
Strumenti di sicurezza
Genera hash SHA-1 nel browser — output hex a 40 caratteri, senza upload. Strumento legacy per impronte Git, verifica di vecchi certificati e audit di migrazione. I dati non lasciano mai il tuo dispositivo.