Como decodificar strings Base64 (e payloads JWT)

Base64 é uma codificação reversível, não criptografia. Decodifique em um passo, trate Unicode corretamente e leia as seções de JWT que usam Base64url.

O que é Base64, na prática

Base64 mapeia dados binários em 64 caracteres ASCII imprimíveis. É totalmente reversível e não usa chave, ou seja, é codificação, não criptografia — nunca use para «esconder» segredos.

Codificar e decodificar

No navegador, codifique com btoa e decodifique com atob. Para texto não ASCII, faça uma ida e volta por UTF-8 para que caracteres como é, ü ou 你 sobrevivam em vez de virarem bytes corrompidos.

Ler um JWT

Um JWT são três trechos em Base64url separados por pontos: header, payload e signature. Decodifique os dois primeiros para ler os claims. A signature é binária e não é feita para ser lida por humanos.

Base64 vs Base64url

O Base64 padrão usa + e / com preenchimento =. O Base64url, seguro para URL, troca-os por - e _ e remove o preenchimento, para que o valor caiba com segurança em URLs e JWTs.

Decodificar não é verificar

Decodificar um JWT revela os claims, mas não diz nada sobre autenticidade. Qualquer pessoa pode forjar um token cujo payload diga "role":"admin"; só a signature, verificada contra a chave do emissor, prova que o token é real. Nunca tome uma decisão de confiança em cima de um token não verificado.

Claims comuns de JWT e o que significam

iss é o emissor, sub o sujeito (id do usuário), aud a audiência prevista, exp a expiração (segundos Unix), iat o instante de emissão, nbf «not before» e jti um id único. Claims personalizados ficam ao lado destes. Cheque exp e aud sempre no servidor, não só no cliente.

Padding e variantes URL-safe

Base64url quase sempre chega sem o padding =. Para decodificar em código, complete o tamanho com = até ser múltiplo de 4, troque - por + e _ por /, e então rode um decodificador Base64 comum. O atob do navegador não aceita Base64url direto — a conversão precisa acontecer antes.