Runs entirely in your browser — nothing is sent anywhere
Paste a token, read what's inside before you trust it.
A JWT is three Base64URL segments joined by dots — a header, a payload, and a signature. This tool splits them apart, decodes the header and payload back into readable JSON, and can check a signature against a secret you provide. Decoding is not the same as verifying — read on for the difference.
01 · Input
segment map0 characters
Header
Payload
Signature
02 · Process
1
Split the token on each "." into header, payload, and signature.
2
Decode the header and payload from Base64URL back into UTF-8 text, then parse as JSON.
3
Read standard claims like exp and iat as human dates automatically.
4
Optionally verify an HS256/384/512 signature locally, using the Web Crypto API.
Verify signature optional
Verification happens locally using your browser's crypto engine. Only symmetric algorithms (HMAC) are supported here, since RS/ES/PS algorithms need the issuer's public key, not a value you'd paste into a tool.
03 · Output
Paste a token above to see it decoded here.
Tip: the Example button above loads a sample HS256 token with common claims — use secret your-256-bit-secret to see verification succeed.
How it works
Three segments, one dot-separated string
01
Header
A small JSON object naming the signing algorithm (alg) and token type (typ), Base64URL-encoded.
02
Payload
The claims — arbitrary data plus registered fields like sub, iat, and exp. Anyone can read this; it isn't encrypted.
03
Signature
Proves the header and payload weren't altered after signing — if you hold the right key or secret.
04
Decode vs. verify
Decoding just reads the Base64URL — anyone can do it. Verifying checks the signature, and needs a secret or public key.
FAQ
Common questions
Does my token get sent to a server?+
No. Every step — splitting, decoding, and optional signature verification — runs in JavaScript in your browser. Nothing is transmitted, logged, or stored.
Why can I read the payload without a secret?+
A JWT's payload is only Base64URL-encoded, not encrypted. Treat it like a sealed envelope with a clear window: tamper-evident, but not private. Never put secrets inside a JWT payload.
Why did verification fail even though the token looks fine?+
The most common causes are a mismatched secret, whitespace accidentally copied into the token or secret field, or a token signed with an asymmetric algorithm (RS/ES/PS), which this tool can't verify without a public key.
What does an expired token mean?+
The exp claim is a Unix timestamp for when a token stops being valid. This tool flags it for you, but enforcing expiry is the server's job — decoding alone won't reject an expired token.
Can I decode tokens that use RS256 or ES256?+
Yes — the header and payload decode the same way regardless of algorithm. Only signature verification is limited to HMAC algorithms here, since asymmetric algorithms need a public key rather than a shared secret.
Related tools
From the same toolkit
Base64 Encode / Decode
Convert plain text to and from Base64 and Base64URL.
planned
JSON Formatter
Pretty-print, minify, and validate raw JSON.
planned
Timestamp Converter
Convert Unix timestamps to and from readable dates.