๐Ÿชช 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