JWT-Secret-Generator — HS256/384/512
Erzeuge ein starkes, RFC-konformes JWT-Secret für HS256/384/512 — 100 % im Browser, nie an einen Server gesendet. base64url, base64 oder hex; für .env kopieren.
Äquivalente CLI-Befehle
Was ist ein JWT-Secret-Generator?
Ein JWT-Secret-Generator erzeugt den zufälligen Signierschlüssel, mit dem ein HMAC-signiertes JSON Web Token beweist, dass es nicht manipuliert wurde. Wenn du ein Token mit HS256, HS384 oder HS512 signierst, führt der Algorithmus HMAC über Header und Payload des Tokens aus, unter Verwendung eines einzigen gemeinsamen Secrets; der Prüfer berechnet denselben HMAC mit demselben Secret neu und akzeptiert das Token nur, wenn die Signaturen übereinstimmen. Die gesamte Sicherheit dieses Verfahrens beruht darauf, dass das Secret lang und unvorhersehbar ist — genau das erzeugt dieses Tool: eine zufällige Zeichenkette mit hoher Entropie, in deinem Browser erzeugt und korrekt für den von dir gewählten Algorithmus dimensioniert.
Es lohnt sich, genau zu sein, was dieses Tool tut und was nicht. Es erzeugt den geheimen Schlüssel — den Wert, den du in deine JWT_SECRET-Umgebungsvariable einträgst — nicht ein fertiges Token. Wenn du einen Header und eine Payload zusammenbauen und sie zu einem tatsächlichen JWT signieren willst, ist das die Aufgabe des JWT-Kodierers; um ein bestehendes Token zu zerlegen und seine Signatur zu prüfen, nutze den JWT-Dekodierer. Stell dir das Secret als Schlüssel und den Kodierer als das Schloss vor, das er bedient: Du erzeugst den Schlüssel einmal, bewahrst ihn sicher auf und verwendest ihn wieder, um viele Tokens zu signieren und zu prüfen.
Wie lang sollte der Schlüssel sein? Die Antwort ist durch die Spezifikation festgelegt, nicht durch Vorliebe. RFC 7518 §3.2 — der JSON-Web-Algorithms-Standard — verlangt, dass ein HMAC-Schlüssel mindestens so groß wie die Hash-Ausgabe ist: „Ein Schlüssel von derselben Größe wie die Hash-Ausgabe (zum Beispiel 256 Bit für HS256) oder größer MUSS verwendet werden.“ Das ergibt eine saubere Tabelle, der der Generator automatisch folgt:
| Algorithmus | HMAC | Min. Byte | Min. Bit | hex-Zeichen | base64-Zeichen | base64url-Zeichen | |-----------|------|-----------|----------|-----------|--------------|-----------------| | 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 |
Die Zeichenanzahlen ergeben sich aus den RFC-4648-Codierungen dieser Byte-Längen: hex verdoppelt die Byte-Anzahl; base64 dehnt um 4⁄3 mit Padding aus; base64url lässt das Padding weg, sodass ein 32-Byte-Schlüssel 43 base64url-Zeichen statt 44 ergibt. base64url ist JWTs native Codierung — URL-sicheres Alphabet, kein Padding — weshalb es hier die Standardausgabe ist; ein Secret in base64url kann in einem Header, einer URL oder einem Konfigurationswert ohne Escaping stehen.
Zufälligkeit ist der Teil, bei dem du keine Kompromisse machen darfst. Dieser Generator zieht seine Bytes aus crypto.getRandomValues, dem kryptografisch sicheren Pseudo-Zufallszahlengenerator des Browsers, demselben Primitiv, das hinter der Schlüsselerzeugung von Web Crypto steht. Er verwendet nie Math.random, das schnell, aber vorhersehbar und völlig ungeeignet für einen Signierschlüssel ist — ein vorhersehbarer RNG bedeutet ein erratbares Secret, und ein erratbares Secret bedeutet fälschbare Tokens. Weil die HMAC-Prüfung lokal mit dem gemeinsamen Secret geschieht, kann ein Angreifer, der ein Token erbeutet, einen schwachen Schlüssel offline per Brute Force ohne Rate-Limit knacken; Werkzeuge wie hashcat (Modus 16500) und jwt_tool existieren genau dafür. Ein zufälliger 32-Byte-Schlüssel mit voller Entropie hingegen liegt rechnerisch außer Reichweite. Die Lehre ist klar: Verwende nie ein Passwort, ein Wörterbuchwort oder eine von Hand getippte Zeichenkette als JWT-Secret — erzeuge ein zufälliges.
Schließlich ist das clientseitige Erzeugen des Schlüssels selbst eine Sicherheitseigenschaft. Ein Signier-Secret sollte nie an Dritte übertragen werden, nicht einmal an die Website, die dir beim Erstellen hilft. Jedes Byte hier wird in deinem Browser erzeugt und codiert; nichts wird hochgeladen, geloggt oder gespeichert. Wenn du bereit bist, den Schlüssel auszuliefern, gibt dir die Schaltfläche „Für .env kopieren“ eine Zeile JWT_SECRET=… , und falls du ihn in eine größere Konfiguration einfügen musst, kann der JSON-zu-.env-Konverter helfen. Erzeugen, kopieren, in einem Secrets-Manager speichern — und mit einem kid-Header und überlappenden Gültigkeitsfenstern rotieren, wenn die Zeit gekommen ist.
// 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))" Hauptfunktionen
Algorithmusbewusste Schlüssellänge
Wähle HS256, HS384 oder HS512, und der Generator setzt die minimale Schlüsselgröße gemäß RFC 7518 §3.2 automatisch — 32, 48 oder 64 Byte. Du kannst einen längeren Schlüssel anfordern, aber nie versehentlich einen zu kleinen bereitstellen, der gegen die Spezifikation verstößt oder den eine strenge Bibliothek zum Signieren ablehnt.
Drei text-sichere Ausgabeformate
Erhalte dieselben Zufallsbytes als base64url (JWTs native, URL-sichere Codierung ohne Padding — der Standard), Standard-base64 oder hex, nebeneinander angezeigt. base64url ist der sicherste Standard für ein JWT_SECRET; wechsle das Format, wenn ein bestimmter Loader oder eine Bibliothek ein anderes erwartet. Die Entropie ist über alle drei identisch.
Kryptografisch sichere Zufälligkeit
Jedes Secret stammt aus crypto.getRandomValues, dem CSPRNG des Browsers und dem Primitiv hinter der Schlüsselerzeugung von Web Crypto. Nie Math.random. Das garantiert einen Schlüssel mit voller Entropie ohne vorhersehbare Struktur — die Eigenschaft, die das Secret jenseits der Reichweite von Offline-Brute-Force stellt.
Für .env kopieren mit einem Klick
„Für .env kopieren“ verpackt den Wert in die übliche Zuweisung JWT_SECRET=… , eine Zeile, keine Anführungszeichen — fertig zum Einfügen in eine .env-Datei, ein Docker-Secret oder eine CI-Variable, ohne den Schlüsselnamen abzutippen. Einfaches „Kopieren“ greift das rohe Secret, wenn du nur den Wert brauchst.
Äquivalente CLI-Befehle
Ein Panel gibt die passenden openssl rand-, Node crypto.randomBytes- und Python secrets-Einzeiler für den gewählten Algorithmus aus, sodass du einen gleich starken Schlüssel in einem Bereitstellungsskript oder einem Dockerfile reproduzieren kannst. Die meisten konkurrierenden Tools lassen das weg; hier ist es eingebaut.
Anzeigen / Verbergen per Maskierung
Das Secret ist standardmäßig maskiert, sodass es während einer Demo, eines Tutorials oder einer Bildschirmfreigabe vom Bildschirm fernbleibt. Blende es nur mit dem Augensymbol ein, wenn du zum Kopieren bereit bist. Kopieraktionen legen immer das echte Secret in die Zwischenablage, ob angezeigt oder verborgen.
100 % privat, nur im Browser
Das Secret wird vollständig auf deinem Gerät erzeugt, codiert und angezeigt. Keine Netzwerkanfragen, kein Logging, keine Speicherung — prüfe es in den DevTools → Netzwerk. Ein Signierschlüssel sollte nie zu Dritten gelangen, und hier tut er das nie, was der ganze Grund ist, ihn clientseitig zu erzeugen.
In 15 Sprachen verfügbar
Die gesamte Oberfläche — Beschriftungen, Anweisungen und Hinweise — ist in 15 Sprachen lokalisiert, sodass das Tool nutzbar und der Sicherheitsrat klar ist, egal wo dein Team arbeitet.
Durchgearbeitete Beispiele
Ein HS256-Secret in base64url erzeugen (Standard)
Algorithmus: HS256 · Format: base64url
3sJ9aFq2kP7mWcZ1xL0nVtRbYdGhU8eAoI4QpNlKj0
HS256 signiert mit HMAC-SHA-256, daher verlangt RFC 7518 §3.2 einen Schlüssel von mindestens 32 Byte (256 Bit). Der Generator zieht 32 kryptografisch sichere Zufallsbytes aus crypto.getRandomValues und codiert sie als base64url — das URL-sichere Alphabet ohne Padding, das JWT selbst verwendet. 32 Byte werden zu einer 43-Zeichen-base64url-Zeichenkette. Setze den Wert direkt in JWT_SECRET. Jeder Klick erzeugt ein frisches Secret; nichts ist jemals zweimal gleich.
Ein HS512-Secret erzeugen (64 Byte / 512 Bit)
Algorithmus: HS512 · Format: base64url
k2Lp9XqA0mNbVcZ7rT4wYsHfGjUe8RoIdPlNkBvM3xQ1aWtCyZuS6FhEgJ (86 chars)
HS512 verwendet HMAC-SHA-512, dessen Hash-Ausgabe 64 Byte beträgt, daher schreibt RFC 7518 §3.2 einen Schlüssel von mindestens 64 Byte (512 Bit) vor. Das Tool erkennt den Algorithmus und erhöht die Byte-Anzahl automatisch — du musst dir das Minimum nie merken. 64 Zufallsbytes codieren zu einer 86-Zeichen-base64url-Zeichenkette, 88 Zeichen in Standard-base64 oder 128 hex-Zeichen. Hier einen längeren Algorithmus zu wählen ist der Ein-Klick-Weg, ein Secret mit höherer Entropie bereitzustellen.
Das Secret als .env-Zeile kopieren
Auf „Für .env kopieren“ klicken
JWT_SECRET=3sJ9aFq2kP7mWcZ1xL0nVtRbYdGhU8eAoI4QpNlKj0
„Für .env kopieren“ verpackt den erzeugten Wert in die übliche Zuweisung JWT_SECRET=… , sodass du ihn direkt in eine .env-Datei, ein Docker-Secret oder eine CI-Variable einfügen kannst, ohne den Schlüsselnamen abzutippen. Der Wert bleibt in einer Zeile ohne umschließende Anführungszeichen — genau das, was dotenv-artige Loader erwarten. Brauchst du die Variable in eine größere Konfiguration eingebettet? Kombiniere dies mit dem unten verlinkten JSON-zu-.env-Konverter.
Das Secret per CLI reproduzieren (gleiche Stärke)
Den CLI-Befehl anzeigen
openssl rand -base64 32
Das CLI-Panel gibt die openssl-, Node- und Python-Befehle aus, die für den gewählten Algorithmus dieselbe Anzahl sicherer Zufallsbytes ziehen — openssl rand -base64 32 für HS256, …48 für HS384, …64 für HS512. Die Ausgabe ist ein gleich starkes Secret, keine byte-identische Zeichenkette: openssl gibt Standard-base64 mit Padding aus, während dieses Tool standardmäßig base64url nutzt, sodass sich Alphabete und Endzeichen unterscheiden. Verwende, was zu deinem Bereitstellungsskript passt; die Entropie ist dieselbe.
Das Secret anzeigen und verbergen
Auf das Augensymbol klicken
••••••••••••••••••••••••••••••••••••••••••• ↔ 3sJ9aFq2kP7m…
Das Secret ist standardmäßig maskiert, sodass es während einer Demo oder Bildschirmfreigabe nicht über die Schulter ausgespäht oder per Bildschirmaufnahme erfasst werden kann. Klicke auf das Augensymbol, um es einzublenden, wenn du zum Kopieren bereit bist, und blende es danach wieder aus. „Kopieren“ und „Für .env kopieren“ funktionieren, ob der Wert angezeigt oder maskiert ist — das echte Secret landet immer in deiner Zwischenablage, nie die Punkte.
So nutzt du den JWT-Secret-Generator
- 1
Den Signieralgorithmus wählen
Wähle HS256, HS384 oder HS512. Der Generator wendet sofort die minimale Schlüssellänge gemäß RFC 7518 §3.2 für diese HMAC-Variante an — 32, 48 oder 64 Byte — sodass du die Zahl nie nachschlagen oder einen zu kleinen Schlüssel riskieren musst.
- 2
Das Ausgabeformat wählen
base64url ist der Standard — JWTs native URL-sichere Codierung ohne Padding. Wechsle zu Standard-base64, falls ein Loader es erwartet, oder zu hex, wenn ein System nur 0–f-Zeichen akzeptiert. Alle drei codieren dieselben Zufallsbytes mit identischer Entropie.
- 3
Das Secret einblenden und kopieren
Das Secret ist standardmäßig maskiert, um es während einer Demo oder Bildschirmfreigabe vom Bildschirm fernzuhalten. Klicke auf das Augensymbol, um es einzublenden, dann auf „Kopieren“, um den Rohwert zu greifen, oder „Für .env kopieren“, um eine Zeile JWT_SECRET=… fertig für eine .env-Datei oder CI-Variable zu kopieren.
- 4
Bei Bedarf neu erzeugen
Klicke auf „Neu erzeugen“ für ein frisches, unabhängiges Secret aus crypto.getRandomValues. Erzeuge eines pro Umgebung — verwende denselben Signierschlüssel nie über Entwicklung, Staging und Produktion hinweg wieder.
- 5
Das CLI-Äquivalent nutzen oder zum Signieren übergehen
Das CLI-Panel zeigt die passenden openssl-, Node- und Python-Einzeiler für skriptgesteuerte Bereitstellung. Mit deinem Secret in der Hand signierst du ein Token mit dem JWT-Kodierer und bestätigst die Signatur mit dem JWT-Dekodierer.
Häufige Fehler bei JWT-Secrets
Ein Passwort oder eine kurze Phrase als Secret verwendet
Eine menschlich gewählte Zeichenkette hat viel zu wenig Entropie für einen Signierschlüssel und kann offline mit einem Wörterbuch- oder Brute-Force-Angriff wiederhergestellt werden, woraufhin jedes Token gefälscht werden kann. Erzeuge stattdessen ein zufälliges Secret mit voller Entropie.
JWT_SECRET=mySuperSecret123 → low entropy, brute-forceable
JWT_SECRET=3sJ9aFq2kP7mWcZ1xL0nVtRbYdGhU8eAoI4QpNlKj0 → 32 random bytes
Schlüssel kürzer als vom Algorithmus verlangt
RFC 7518 §3.2 schreibt einen HMAC-Schlüssel mindestens so lang wie die Hash-Ausgabe vor. Ein 16-Byte-Schlüssel für HS256 liegt unter der 32-Byte-Untergrenze — er schwächt die Signatur, und manche Bibliotheken lehnen ihn direkt ab.
16-byte key with HS256 → below the 32-byte minimum
32-byte key with HS256 → meets RFC 7518 §3.2
Den Schlüssel mit Math.random erzeugt
Math.random ist nicht kryptografisch sicher — seine Ausgabe ist vorhersehbar, sodass ein damit gebautes Secret erratbar ist und die damit signierten Tokens fälschbar sind. Ein Signierschlüssel muss aus einem CSPRNG wie crypto.getRandomValues stammen.
Math.random()-based key → predictable, unsafe
crypto.getRandomValues key → full entropy
Das Secret vor dem Signieren neu codiert
Speichere und gib die exakte Zeichenkette zurück, die das Tool erzeugt hat. Es in einem Dienst zu Bytes base64-zu-decodieren, in einem anderen aber als wörtliche Zeichenkette zu behandeln, gibt den beiden Seiten unterschiedliche Schlüssel, und jede Signaturprüfung schlägt fehl.
Service A: raw string · Service B: base64-decoded → signatures never match
Both services use the identical stored string → signatures verify
Dasselbe Secret über alle Umgebungen hinweg wiederverwendet
Ein von Entwicklung, Staging und Produktion geteiltes JWT_SECRET bedeutet, dass ein Leak irgendwo überall Tokens fälscht und die Rotation zu Alles-oder-nichts wird. Stelle ein eigenes Secret pro Umgebung bereit.
Same JWT_SECRET in dev, staging, prod → one leak breaks all
A unique secret per environment → blast radius contained
Dem alg des Tokens bei der Prüfung vertraut
Den Prüfer akzeptieren zu lassen, welchen Algorithmus auch immer das Token deklariert, ermöglicht alg:none- und HS/RS-confusion-Fälschungen. Übergib eine explizite Algorithmus-Whitelist, egal wie stark das Secret ist.
jwt.verify(token, secret) → accepts the token's alg
jwt.verify(token, secret, { algorithms: ['HS256'] }) → pinned Wer dieses Tool nutzt
- Ein JWT_SECRET für einen neuen Dienst bereitstellen
- Startest du eine API, die HMAC-signierte Tokens ausstellt? Wähle den Algorithmus, den deine Bibliothek verwendet, kopiere das Secret als Zeile JWT_SECRET=… und setze es in die Umgebung des Dienstes. Erzeuge je einen eigenen Schlüssel für Entwicklung, Staging und Produktion — teile nie ein Secret über Umgebungen hinweg.
- Ein kompromittiertes oder veraltetes Secret rotieren
- Wenn ein Schlüssel als geleakt vermutet wird oder einfach zur Rotation ansteht, erzeuge hier ein frisches Secret, weise ihm ein neues kid zu und rolle es mit einem Überlappungsfenster aus, sodass aktive Tokens bis zu ihrem Ablauf weiter verifizieren. Bei bestätigtem Kompromittieren rotiere sofort und entferne den alten Schlüssel aus der akzeptierten Menge.
- Einen schwachen oder von Hand getippten Schlüssel ersetzen
- Eine Codebasis geerbt, deren JWT_SECRET eine kurze Phrase oder ein kopierter Beispielwert ist? Dieser Schlüssel ist offline per Brute Force knackbar. Erzeuge einen 32-Byte-Ersatz mit voller Entropie, tausche ihn hinter einem Rotationsfenster ein und schließe die Token-Fälschungslücke, bevor sie ausgenutzt wird.
- Schlüsselerzeugung in einer Pipeline skripten
- Den Schlüssel lieber in CI oder einem Dockerfile statt von Hand erzeugt? Verwende den openssl-, Node- oder Python-Einzeiler des CLI-Panels, um ein gleich starkes Secret in deinem Bereitstellungsskript zu prägen, und nutze diese Seite, um die Byte-Längen und Codierungen zu verstehen, die jeder Befehl erzeugt.
- JWT-Signieren sicher vermitteln
- Führe ein Team durch die Funktionsweise von HS256, ohne je einen echten Produktionsschlüssel offenzulegen — erzeuge ein Wegwerf-Secret auf dem Bildschirm (maskiert, bis du es einblendest), signiere ein Beispiel-Token mit dem JWT-Kodierer und prüfe es mit dem JWT-Dekodierer, sodass der gesamte Signier-und-Prüf-Kreislauf sichtbar wird.
- HS256-, HS384- und HS512-Schlüsselgrößen vergleichen
- Du entscheidest, welche HMAC-Variante du standardisieren willst? Wechsle zwischen den Algorithmen, um zu sehen, wie die erforderliche Schlüssellänge und die codierte Zeichenkette wachsen — 43, 64 und 86 base64url-Zeichen — und wähle den Kompromiss aus Stärke und Token-Größe, der zu deinem System passt, bevor du ihn in die Konfiguration übernimmst.
- Schlüssel für die lokale Entwicklung erzeugen
- Brauchst du ein schnelles, gültiges Secret, um einen lokalen Auth-Ablauf zum Laufen zu bringen? Erzeuge eines mit einem Klick, kopiere es für .env, und du bist entblockt — mit einem echten CSPRNG-Schlüssel statt eines Platzhalters, den du vor dem Deploy zu ersetzen vergisst.
So funktioniert der Generator
- crypto.getRandomValues (CSPRNG)
- Secrets werden erzeugt, indem ein Uint8Array mit crypto.getRandomValues gefüllt wird, dem kryptografisch sicheren Pseudo-Zufallszahlengenerator von Web Crypto. Es ist dieselbe Entropiequelle, die hinter der Schlüsselerzeugung von Web Crypto steht. Math.random wird nirgends verwendet — es ist statistisch vorhersehbar und für jeden kryptografischen Schlüssel ungeeignet.
- Schlüsseldimensionierung nach RFC 7518 §3.2
- Die Byte-Anzahl pro Algorithmus folgt der JSON-Web-Algorithms-Anforderung, dass ein HMAC-Schlüssel mindestens so groß wie die Hash-Ausgabe ist: 32 Byte für HS256 (SHA-256), 48 für HS384 (SHA-384), 64 für HS512 (SHA-512). Die Wahl des Algorithmus setzt das Minimum; der Generator gibt keinen Schlüssel unterhalb der Spezifikationsuntergrenze aus.
- RFC-4648-Codierungen (base64url / base64 / hex)
- Die Rohbytes werden mit den RFC-4648-Alphabeten codiert. base64url verwendet das URL-sichere Alphabet ohne Padding (32 Byte → 43 Zeichen), Standard-base64 verwendet +, / und =-Padding (→ 44 Zeichen), und hex schreibt zwei Zeichen pro Byte (→ 64 Zeichen). Das Wechseln des Formats codiert dieselben Bytes neu — die zugrunde liegende Entropie bleibt unverändert.
- Warum base64url der Standard ist
- JWT-Komponenten sind selbst base64url-codiert, und das URL-sichere Alphabet ohne Padding bedeutet, dass ein Secret in base64url in einem Header, einer URL oder einer Konfigurationsdatei nie escaped werden muss. Das +, / und abschließende = von Standard-base64 kann in diesen Kontexten brechen, daher ist base64url der konservative Standard für ein JWT_SECRET.
- Formatierung für „Für .env kopieren“
- „Für .env kopieren“ gibt JWT_SECRET=
in einer einzigen Zeile ohne umschließende Anführungszeichen aus — die Form, die dotenv-artige Loader ohne Änderung parsen. Das rohe Secret enthält nie Zeichen, die in einer .env-Datei Anführungszeichen erfordern würden, sodass die Zeile sicher unverändert eingefügt werden kann. - Gleich starke CLI-Befehle, nicht byte-identisch
- Die Befehle openssl rand -base64 N, Node randomBytes(N).toString('base64url') und Python secrets.token_urlsafe(N) des CLI-Panels ziehen alle N sichere Zufallsbytes für den gewählten Algorithmus. Sie erzeugen gleich starke Schlüssel, nicht dieselbe Zeichenkette — openssl gibt gepolstertes Standard-base64 aus, sodass sich Alphabet und Endzeichen vom base64url-Standard dieses Tools unterscheiden.
Best Practices für JWT-Secrets
- Die Schlüssellänge an den Algorithmus anpassen
- Verwende mindestens 32 Byte für HS256, 48 für HS384 und 64 für HS512, wie RFC 7518 §3.2 verlangt. Dieser Generator erledigt das für dich, aber wenn du einen Schlüssel von Hand dimensionierst, gehe nie unter die Länge der Hash-Ausgabe — ein zu kleiner HMAC-Schlüssel schwächt sowohl die Signatur als auch kann er von strengen Bibliotheken abgelehnt werden.
- Immer mit einem CSPRNG erzeugen, nie mit einem Passwort
- Ein JWT-Secret ist eine Maschinen-Anmeldung, die sich niemand merken muss, also gib die volle Entropie aus: Verwende einen kryptografisch sicheren Zufallsschlüssel, keine Passphrase, kein Wörterbuchwort und keine von Hand getippte Zeichenkette. Menschlich gewählte Secrets sind das leichteste Ziel für die Offline-Brute-Force-Angriffe, die JWT-Knack-Werkzeuge automatisieren.
- Ein eindeutiges Secret pro Umgebung verwenden
- Entwicklung, Staging und Produktion sollten je ein eigenes JWT_SECRET haben. Einen Schlüssel zu teilen bedeutet, dass ein Leak in einer risikoarmen Umgebung überall Tokens fälscht, und es macht die Rotation zu einer Alles-oder-nichts-Angelegenheit. Erzeuge hier ein separates Secret für jede Umgebung und speichere jedes in seinem eigenen Secrets-Manager-Bereich.
- Den Algorithmus beim Prüfen festschreiben
- Übergib auf der Prüfseite immer eine explizite Algorithmus-Whitelist — algorithms: ['HS256'] in jsonwebtoken, algorithms=["HS256"] in PyJWT — und vertraue nie dem alg-Feld im Token. Das selbstdeklarierte Algorithmus-Feld des Tokens zu akzeptieren, ermöglicht die klassischen alg-confusion- und alg:none-Fälschungsangriffe, egal wie stark dein Secret ist.
- Mit einem kid-Header und überlappenden Schlüsseln rotieren
- Versieh signierte Tokens mit einer Schlüsselkennung (kid) und veröffentliche aktive Schlüssel über einen JWKS-Endpunkt, sodass du ohne Ausfallzeit rotieren kannst: Signiere neue Tokens mit dem neuen Schlüssel, während du den alten noch akzeptierst, bis dessen Tokens ablaufen. Bei vermutetem Kompromittieren überspringe die Überlappung und widerrufe den alten Schlüssel sofort.
Häufig gestellte Fragen
Wird mein erzeugtes JWT-Secret an euren Server gesendet?
Wie erzeuge ich ein sicheres JWT-Secret?
Wie lang sollte ein HS256-JWT-Secret sein?
Was ist der Unterschied zwischen base64url, base64 und hex, und welches sollte ich wählen?
Kann ein schwaches JWT-Secret geknackt werden?
Kann ich ein Passwort als mein JWT-Secret verwenden?
Wie rotiere ich ein JWT-Secret, ohne aktive Tokens zu brechen?
Wie unterscheidet sich ein HMAC-Schlüssel (HS*) von einem RSA- oder ECDSA-Schlüssel (RS*/ES*)?
Verwandte Werkzeuge
Alle Werkzeuge anzeigen →Bcrypt-Hash-Generator & Verifizierer
Sicherheitswerkzeuge
Bcrypt-Passwort-Hashes online erzeugen und prüfen — einstellbarer Kostenfaktor, $2b$/$2a$/$2y$. 100 % im Browser; dein Passwort wird nie hochgeladen.
JWT-Dekodierer
Sicherheitswerkzeuge
Dekodieren Sie JWT-Token online mit unserem kostenlosen JWT-Dekodierer. Inspizieren Sie sofort Header, Payload, Signatur, Ablauf und Claims. 100 % Browser — Ihr Token verlässt niemals Ihr Gerät. Keine Anmeldung, kein Tracking.
JWT-Kodierer & -Generator
Sicherheitswerkzeuge
Kostenloser Online-JWT-Generator & -Kodierer. Erstellen Sie Header und Payload und signieren Sie sofort mit HS256, RS256 oder ES256. 100 % im Browser — Ihr Geheimnis und Ihr Schlüssel verlassen niemals Ihr Gerät.
MD5-Hash-Generator & Datei-Prüfsummen-Tool
Sicherheitswerkzeuge
MD5-, SHA-256-, SHA-1- & SHA-512-Hashes online kostenlos generieren. Text oder Dateien im Browser hashen, Prüfsummen verifizieren und Ergebnisse kopieren. Ohne Anmeldung.
Zufallspasswort-Generator — Anpassbar, Stark & Sicher
Sicherheitswerkzeuge
Starke Zufallspasswörter sofort generieren — kostenlos, ohne Anmeldung, 100 % im Browser. Länge & Zeichentypen anpassen, bis zu 50 auf einmal. Stärkeanzeige mit Entropie-Analyse.
SHA-1 Hash Generator (160-Bit-Legacy)
Sicherheitswerkzeuge
SHA-1-Hashes im Browser generieren — 40-Zeichen-Hex-Ausgabe, ohne Upload. Legacy-Tool für Git-Fingerprints, alte Zertifikatsprüfungen und Migrationsaudits. Daten verlassen dein Gerät nicht.