🪪 JWT Decoder

Paste a JWT to see its header and payload; enter a secret to also verify its HS256 signature.

How to use

  1. Paste a JWT string.
  2. The header and payload are decoded and shown instantly.
  3. To also check the signature, enter the HS256 secret.

🎯 Use Cases

Example

Input
JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFsaWNlIiwicm9sZSI6ImFkbWluIiwiaWF0IjoxNzAwMDAwMDAwLCJleHAiOjE3MDAwMDM2MDB9.dbgl-1IyaylYQy8Qi72rq4rccV2SP1uxfEMWpg5mskU
HS256 Secret: my-secret-key
Output
HEADER  { "alg": "HS256", "typ": "JWT" }
PAYLOAD { "sub": "1234567890", "name": "Alice", "role": "admin",
          "iat": 1700000000, "exp": 1700003600 }
Issued at (iat): 11/15/2023 / Expires (exp): 11/15/2023
✅ Signature is valid

Pasting this HS256-signed token decodes its header and payload and shows the exp/iat timestamps in human-readable form. Entering the correct secret (my-secret-key) verifies the signature as valid.

JWT registered claims

A JWT payload can hold any custom fields you want, but it's common to also see the standard "registered claims" defined by RFC 7519. This tool automatically converts the time-related claims below into a human-readable date.

ClaimMeaningFormat
iss (issuer)Who issued the tokenString
sub (subject)What the token is about (usually a user ID)String
aud (audience)Who the token is intended for (which service)String/Array
exp (expiration)Expiration time — the token is invalid after thisUnix timestamp (seconds)
nbf (not before)The token isn't valid before this timeUnix timestamp (seconds)
iat (issued at)When the token was issuedUnix timestamp (seconds)

FAQ

Does it verify the signature too?
If you enter a secret key, the HS256 signature can be verified right in your browser. Without a secret, only the header and payload are decoded and shown.
Does it verify asymmetric algorithms like RS256?
Currently only HS256 (symmetric-key) signature verification is supported. For RS256 and others, only header/payload decoding is available.
Can I trust a token just because it decodes fine, without verifying it?
No. A decoded payload without signature verification is just unpacked base64url — anyone can tamper with it. You must verify the signature with a secret (or the server's public key) before trusting the contents.
Is the token or secret I enter sent to a server?
No. Both decoding and signature verification (Web Crypto API) are handled entirely in your browser.

🪪 Learn more: Understanding JWT Structure and How to Decode It

The Header, Payload & Signature — explained

More Security Tools

🔑
Password Generator
Generate strong random passwords
#️⃣
Hash Generator
Generate MD5, SHA-1, SHA-256 hashes
📱
QR Code Generator
Turn text/URLs into a QR code
🗝️
htpasswd Generator
Generate APR1-MD5 hashed passwords
🔍
SSL Certificate Viewer
Check issuer, validity & SANs
📜
CSR Viewer
Check CSR subject & public key info
♻️
SSL Certificate Converter
Convert PEM ↔ DER (HEX)
🤝
Cert/Key Pair Checker
Verify a certificate matches its private key
🩺
SSL Checker
Check HTTPS connectivity & trust
🪄
Self-Signed Certificate Generator
Generate a self-signed SSL cert & key
🔐
Base64 Encode/Decode
Convert text ↔ Base64
🔑
HTTP Auth Header Generator
Build Basic/Bearer Authorization headers
🎫
Random Token Generator
Generate Hex/Base64/UUID tokens
🔒
Jasypt Encrypt/Decrypt
Encrypt/decrypt Spring Boot ENC(...) values