Help shape the future of JSON Workbench! We'd love to hear how you use it.
01

O que o Base64 realmente é

Base64 é uma forma de escrever bytes arbitrários usando apenas caracteres seguros e imprimíveis — nada mais. O nome vem do seu alfabeto: exatamente 64 caracteres (A–Z, a–z, 0–9, + e /), mais o sinal = reservado para o preenchimento. Como esses caracteres sobrevivem a qualquer canal de só texto — cabeçalhos HTTP, strings JSON, XML, corpos de e-mail, URLs — o Base64 permite que os bytes cheguem a lugares onde, de outro modo, seriam corrompidos.

Por que 64 caracteres? Porque 64 = 2⁶: cada caractere de saída carrega exatamente 6 bits, de modo que a correspondência entre bytes e caracteres é pura manipulação de bits, sem ambiguidade. O preço é o tamanho: o codificador lê a entrada 3 bytes por vez (24 bits), divide-os em quatro grupos de 6 bits e emite um caractere por grupo:

M
'M' = 77
01001101
a
'a' = 97
01100001
n
'n' = 110
01101110
24 bits
010011010110000101101110→ 4 × 6 bits
T
010011 = 19
W
010110 = 22
F
000101 = 5
u
101110 = 46

Man → TWFu — Toda string Base64 que você encontrar funciona exatamente como esta — incluindo as que se escondem em JWTs e data URIs.

+33% de tamanho. Cada 3 bytes de entrada viram exatamente 4 caracteres de saída, então o resultado Base64 é cerca de um terço maior que o original. O preenchimento = completa o comprimento até um múltiplo de 4 quando a entrada não é múltiplo exato de 3 bytes.
Trivialmente reversível. Não há chave nem segredo — a mesma tabela de alfabeto existe em todas as linguagens e decodificadores. Reverter leva microssegundos.
Não é criptografia. O Base64 existe para tornar os bytes seguros de transportar, não para escondê-los. Qualquer pessoa que veja dXNlcjpwYXNz consegue lê-lo. Nunca trate uma senha ou chave de API codificada em Base64 como protegida.
02

Onde você realmente vai encontrá-lo

Você raramente decide usar Base64 — encontra-o esperando numa resposta de API, num cabeçalho ou num arquivo de configuração. Cada cartão abaixo é um desses momentos: o que você vê, o que fazer nesta página e o que você obtém.

Data URIs

Você vê

Uma URL como data:image/png;base64,iVBORw0KGgo… embutida em HTML, CSS ou num bundle do webpack.

Faça isto

Copie tudo depois de base64,, cole aqui e pressione Decode & Format.

Você obtém

Para cargas de texto (código-fonte SVG, JSON, CSV) você recupera conteúdo legível. Binários reais como PNG saem como caracteres ilegíveis — veja as armadilhas abaixo; esta página decodifica para texto, não para arquivos.

Tokens JWT

Você vê

Um token como eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjMifQ.sig — três segmentos separados por pontos cujos dois primeiros sempre começam com eyJ, que é simplesmente o início de um objeto JSON depois de codificado.

Faça isto

Copie o segmento central entre os pontos, cole aqui e pressione Decode & Format. Ou abra o token inteiro no depurador JWT.

Você obtém

O payload de claims impresso como JSON formatado na sua própria aba, pronto para as visualizações Tree/Table. Os caracteres URL-safe - e _ são tratados automaticamente.

Cabeçalhos Authorization

Você vê

Um cabeçalho HTTP como Authorization: Basic dXNlcjpwYXNz num dump de requisições ou log de proxy.

Faça isto

Copie apenas a parte depois de Basic, cole aqui e pressione Decode & Format.

Você obtém

As credenciais em texto claro — aqui user:pass. Um lembrete útil: a autenticação Basic só protege algo porque viaja dentro de HTTPS.

E-mails e partes MIME

Você vê

Uma parede de letras quebradas sob Content-Transfer-Encoding: base64 ao ver o código-fonte de um e-mail ou um arquivo .eml.

Faça isto

Junte primeiro as linhas quebradas numa única string (quebras de linha internas não fazem parte do alfabeto), depois cole e pressione Decode & Format.

Você obtém

O conteúdo textual daquela parte da mensagem. Anexos realmente binários decodificam como ruído pela mesma razão das data URIs PNG.

Base64 dentro de JSON

Você vê

Um campo como "payload": "eyJ1c2VySWQiOjQyfQ==" dentro de uma resposta de API — algum serviço enfiou dados codificados onde se esperava texto.

Faça isto

Copie o valor, cole aqui e pressione Decode & Format.

Você obtém

Uma nova aba numerada com o conteúdo decodificado e formatado como JSON — sua resposta original permanece intacta no editor, e você pode comparar as duas lado a lado.

03

Codificar ↔ Decodificar

Duas direções, dois botões, zero configuração. Ambos rodam inteiramente no seu navegador — nada é enviado, nada é registrado.

Texto puro → Base64

  1. 1Cole qualquer texto, JSON, XML ou CSV no editor vazio (ou use Paste).
  2. 2Pressione Encode — o conteúdo do editor é substituído no lugar pela sua forma Base64. A codificação respeita UTF-8: emojis e escritas não latinas sobrevivem à ida e volta.
  3. 3Leve o resultado com Copy ou salve-o com Download. A saída usa o alfabeto padrão (+ e /) com o preenchimento = correto.

Base64 → texto ou JSON

  1. 1Cole a string Base64 — padrão ou URL-safe, com preenchimento = ou sem.
  2. 2Pressione Decode & Format (indentado) ou Decode & Minify (linha única). Uma entrada que não seja Base64 válido é rejeitada de imediato com um aviso de erro, em vez de produzir lixo.
  3. 3Se o texto decodificado parsear como JSON, ele abre numa nova aba formatado e validado; qualquer outra coisa abre como texto puro.
Qual eu preciso? Encode substitui o que você digitou pela forma codificada; Decode mantém seu original a salvo e abre o resultado ao lado. Essa assimetria é deliberada — recodificar é barato, os originais às vezes não.
04

Abas e comparação

Sites de codificação de caixa única fazem você trabalhar uma string por vez. Esta página mantém uma sessão inteira:

Sessões multi-aba

Cada decodificação abre uma aba numerada — Base64 #1, Base64 #2, … — em vez de sobrescrever seu trabalho. Seu Base64 original vive no editor raiz: o botão + no fim da barra de abas retorna a ele, e alternar entre abas preserva o conteúdo de cada uma. Feche abas com o ✕ ao passar o mouse; fechar a última retorna ao codificador.

Comparação entre abas

Passe o mouse sobre uma aba e clique no ícone ⇄ dela, depois clique no ícone ⇄ de uma segunda aba. Uma barra de aviso confirma a seleção, e ambos os conteúdos abrem lado a lado na página de comparação JSON com seus rótulos — perfeito para descobrir por que dois resultados supostamente idênticos diferem.

JSON decodificado ganha ferramentas completas

Quando uma decodificação produz JSON, a barra troca para o conjunto completo do formatador: visualizações Code / Tree / Table, busca, Format, Minify, Anonymize, Escape/Unescape, além de Copy, Paste, Upload e Download. Decodificações que não são JSON permanecem como texto simples.

Limites honestos: as abas vivem na memória durante esta visita — não sobrevivem a um recarregamento. E como as abas não-JSON são texto puro, o botão Upload só aparece quando o conteúdo é reconhecido como JSON.
05

Armadilhas: sintoma → causa → correção

Noventa por cento dos relatos de "meu Base64 não funciona" caem em cinco grupos:

SintomaCausaCorreção
Rejeitado com “Content is not a valid Base64 string.”O validador encontrou um caractere fora do alfabeto — normalmente um espaço, quebra de linha ou aspas copiadas junto com a string — ou o comprimento deixa um caractere sobrando após remover o preenchimento.Copie novamente a string exata sem aspas ao redor, junte as linhas quebradas e verifique que nada foi truncado nas extremidades.
Funciona nesta ferramenta mas falha em outras (ou vice-versa)Falta o preenchimento =. Muitos decodificadores exigem comprimento múltiplo de 4; esta página completa automaticamente, ferramentas estritas não.Acrescente = até o comprimento dividir por 4 antes de alimentar um decodificador mais estrito.
Um segmento JWT falha ao decodificar em outro lugarJWTs usam base64url: + vira - e / vira _, muitas vezes sem preenchimento algum.Aqui é automático — ambos os alfabetos são aceitos e normalizados. Em outros lugares, troque -/_ por +// e complete o preenchimento primeiro.
A saída decodificada é ilegível, tipo �PNGA carga era binário real (imagem, zip, fonte). A decodificação produziu os bytes corretos; exibi-los como texto UTF-8 gera caracteres de substituição.Nada está corrompido — você simplesmente não pode mostrar bytes como texto. Para binários use ferramentas orientadas a arquivos ou sirva-os via data URI.
Base64 estilo e-mail não validaMIME quebra a saída em colunas de 76. Só os espaços externos são aparados aqui; quebras de linha dentro da string são caracteres ilegais.Junte as linhas numa única string (um buscar-e-substituir de quebras de linha resolve) e decodifique de novo.
“Está em Base64, então minha chave de API fica oculta, certo?”Não. Codificar não adiciona sigilo algum — qualquer decodificador, este incluído, a reverte instantaneamente.Proteja segredos com criptografia ou hashing num servidor, mantenha-os fora do código cliente por completo e rotacione qualquer chave que já tenha sido enviada codificada em Base64.
06

Cola rápida

As mesmas operações longe desta página — entradas idênticas produzem saídas idênticas:

Comando / sintaxeO que faz
btoa('Man') // 'TWFu'Codificar em JS de navegador. Só Latin-1 — falha com emojis ou qualquer caractere acima de U+00FF.
atob('TWFu') // 'Man'Decodificar em JS de navegador.
btoa(String.fromCharCode(...new TextEncoder().encode(s)))Truque de codificação seguro para Unicode — a mesma abordagem que esta ferramenta usa internamente, em blocos para entradas grandes.
echo -n 'Man' | base64 # TWFuCodificar via CLI. A flag -n suprime a quebra de linha do echo — sem ela você codificaria Man\n e obteria TWFuCg==.
echo 'TWFu' | base64 -d # ManDecodificar via CLI (GNU coreutils). O macOS usa --decode ou -D; o GNU também oferece -w 0 para desativar a quebra em 76 colunas.
data:[mediatype][;base64],DATAAnatomia de uma data URI — p. ex. data:text/plain;base64,SGVsbG8=. Tudo depois da vírgula é Base64 puro.
header.payload.signatureAnatomia de um JWT: três segmentos base64url. Cabeçalho e payload decodificam para JSON; a assinatura decodifica para bytes brutos e não deveria ser legível.
07

Perguntas frequentes

Meus dados são enviados para algum lugar?

Não. Codificar, decodificar, validar e formatar acontecem todos no seu navegador com JavaScript. Não há nenhuma chamada a um backend — depois que a página carrega, as ferramentas continuam funcionando até offline.

Ele decodifica o Base64 URL-safe usado em JWTs?

Sim. Os caracteres URL-safe - e _ são normalizados automaticamente, e preenchimento ausente é tolerado. Note que um token inteiro com pontos não é ele próprio Base64 válido — decodifique os segmentos individualmente, ou use o depurador JWT, que trata dessa anatomia para você.

O Encode produz Base64 URL-safe?

Não — a saída sempre usa o alfabeto padrão (+, /, =). Se um sistema de destino precisa da variante URL-safe, troque +→-, /→_ e remova você mesmo o = final.

Por que decodificar abre uma nova aba em vez de substituir meu texto?

É um design deliberado. Sua string original fica no editor raiz enquanto cada resultado ganha sua própria aba numerada, então você pode decodificar várias cargas em sequência, inspecionar cada uma e levar quaisquer duas delas à página de comparação sem colar nada de novo.

Qual o tamanho máximo de string?

Não há limite artificial — o limite prático é a memória da aba do seu navegador. Strings de vários megabytes processam confortavelmente no desktop; a codificação passa por conversão em blocos para evitar limites de pilha, então entradas muito longas não travam como podem travar chamadas ingenuas de uma vez só ao btoa.

É grátis? Preciso de uma conta?

Completamente grátis, sem conta, sem limites de uso, sem marcas d'água. Como toda ferramenta deste site, roda inteiramente no seu dispositivo — suas cargas nunca são enviadas nem armazenadas num servidor.

Trabalhando com tokens? O depurador JWT decodifica tokens completos — cabeçalho, payload e verificação de assinatura incluídos — o que combina naturalmente com a decodificação segmento a segmento desta página. Para editar ou inspecionar mais a fundo um payload decodificado, use o formatador JSON; para comparar dois resultados decodificados, a ferramenta de comparação JSON assume exatamente onde a comparação entre abas entrega.