Skip to content
jwtcodec

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

235 charsJWS (signed)HMAC + SHA-256

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.