Private by design — tokens and keys never leave your browser
JWT decoder, encoder & editor
Decode JSON Web Tokens, check expiry, verify signatures and create or re-sign tokens. Supports HMAC, RSA, RSA-PSS, ECDSA and EdDSA with PEM, JWK and JWKS keys.
Encoded token
Header
{
"alg": "HS256",
"typ": "JWT"
}Payload
{
"sub": "1234567890",
"name": "Ada Lovelace",
"email": "ada@example.com",
"admin": true,
"iat": 1767225600,
"exp": 4102444800
}Verify signature
Checking…
Tools
Anatomy of a JWT
A JWT is three Base64URL-encoded parts joined by dots. The signature is computed over the first two, so changing a single character of the header or payload invalidates it.
Header
Which algorithm signed the token (alg), the token type (typ) and often a key ID (kid).
{ "alg": "HS256", "typ": "JWT" }Payload
The claims: who the token is about (sub), who issued it (iss), for whom (aud), when it expires (exp) and any custom data.
{ "sub": "123", "exp": 1767229200 }Signature
sign( base64url(header) + "." + base64url(payload), key ). Proves who issued the token and that it hasn't been changed.
HMACSHA256(data, secret)Frequently asked questions
Is it safe to paste my token here?+
Decoding, verifying and signing all happen in your browser with the Web Crypto API. Tokens, secrets and keys are never sent to a server. Still, treat production tokens like passwords: they grant access until they expire.
Is the payload of a JWT encrypted?+
No. A normal (signed) JWT is only Base64URL-encoded, so anyone holding it can read the claims. The signature stops people changing it, not reading it. Never put secrets in a JWT payload. If you need confidentiality, use an encrypted JWE.
Which algorithms are supported?+
HS256/384/512 (HMAC), RS256/384/512 (RSA), PS256/384/512 (RSA-PSS), ES256/384/512 (ECDSA) and EdDSA (Ed25519), plus unsigned "none" tokens for inspection.
What key formats can I use?+
For HMAC, a text or Base64URL secret. For RSA, ECDSA and EdDSA: PEM public/private keys (SPKI, PKCS#8, PKCS#1, SEC1), X.509 certificates, JWKs, or a whole JWKS — the key matching the token's kid is chosen automatically.
Why does my token say the signature is invalid?+
Either the token was changed after it was signed, or the key doesn't match. Check you're using the right secret (and whether it's Base64-encoded) or the public key that pairs with the signer's private key.