Base64 é uma forma de representar qualquer dado binário usando apenas 64 caracteres imprimíveis. Não é criptografia, é só «outro jeito de escrever» os mesmos bytes. Os 64 caracteres são A–Z, a–z, 0–9, + e /, com = como preenchimento no final. Como esses caracteres passam sem problema por cabeçalhos HTTP, JSON, XML, e-mails e URLs, o Base64 é usado para enviar imagens e dados binários por canais que só aceitam texto.
Por que 64 caracteres? Porque 64 = 2⁶: cada caractere carrega exatamente 6 bits. O codificador lê 3 bytes (24 bits), divide em quatro grupos de 6 bits e converte cada grupo em um caractere:
Man → TWFu — Toda string Base64 que você encontrar, inclusive as de JWT e de data URI, funciona igualzinho a este exemplo.
= completa até um múltiplo de 4.dXNlcjpwYXNz consegue ler. Nunca trate uma senha ou chave de API «passada em Base64» como se estivesse protegida.Quase ninguém decide usar Base64: ele aparece numa resposta de API, num cabeçalho ou num arquivo de configuração. Cada cartão é um caso real: o que você vê, o que fazer aqui e o que você recebe.
Uma URL como data:image/png;base64,iVBORw0KGgo… dentro de HTML, CSS ou de um bundle do webpack.
Copie tudo que vem depois de base64,, cole aqui e clique em Decodificar e formatar.
Conteúdos de texto (código SVG, JSON, CSV) voltam legíveis. Binários de verdade, como um PNG, saem como caracteres ilegíveis (veja Problemas comuns abaixo): esta página decodifica para texto, não para arquivos.
Um token como eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjMifQ.sig: três partes separadas por pontos. As duas primeiras sempre começam com eyJ, que é só o início de um objeto JSON codificado.
Copie a parte do meio (entre os dois pontos), cole aqui e clique em Decodificar e formatar. Ou passe o token inteiro pelo depurador JWT.
O payload com as claims aparece como JSON formatado em uma aba própria, pronto para alternar entre árvore e tabela. Os caracteres URL-safe - e _ são tratados automaticamente.
Um cabeçalho como Authorization: Basic dXNlcjpwYXNz em um dump de requisição ou nos logs de um proxy.
Copie só o que vem depois de Basic, cole aqui e clique em Decodificar e formatar.
As credenciais em texto puro, no caso user:pass. E um lembrete de por que a autenticação Basic só é aceitável dentro de HTTPS.
Um bloco longo de texto quebrado em linhas sob Content-Transfer-Encoding: base64 ao ver o código-fonte de um e-mail ou um arquivo .eml.
Junte as linhas numa string só (as quebras de linha internas não fazem parte do alfabeto), cole e clique em Decodificar e formatar.
O conteúdo de texto dessa parte do e-mail. Um anexo binário de verdade sai como ruído, pelo mesmo motivo do PNG acima.
Um campo como "payload": "eyJ1c2VySWQiOjQyfQ==" numa resposta de API: algum serviço colocou dados codificados onde deveria haver texto.
Copie o valor, cole aqui e clique em Decodificar e formatar.
Uma nova aba numerada com o resultado formatado como JSON; sua resposta original fica intacta no editor, e você pode compará-las lado a lado.
Duas direções, dois botões, nenhuma configuração. Tudo roda no seu navegador: nada é enviado nem registrado.
+ e /) com o preenchimento = correto.=.Sites de codificação de caixa única fazem você trabalhar uma string por vez. Esta página mantém uma sessão inteira:
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.
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.
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.
Noventa por cento dos relatos de "meu Base64 não funciona" caem em cinco grupos:
| Sintoma | Causa | Correçã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 lugar | JWTs 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 �PNG | A 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 valida | MIME 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. |
As mesmas operações longe desta página — entradas idênticas produzem saídas idênticas:
| Comando / sintaxe | O 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 # TWFu | Codificar 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 # Man | Decodificar 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],DATA | Anatomia de uma data URI — p. ex. data:text/plain;base64,SGVsbG8=. Tudo depois da vírgula é Base64 puro. |
| header.payload.signature | Anatomia 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. |
Não. Codificar, decodificar, validar e formatar acontecem no seu navegador, com JavaScript. Não há nenhuma requisição ao servidor, e com a página carregada você pode continuar usando offline.
Sim. Os caracteres - e _ são normalizados automaticamente e a falta de preenchimento é tolerada. Só lembre que um token completo, com os pontos, não é Base64 válido: decodifique cada parte separadamente ou use o depurador JWT.
Não. A saída sempre usa o alfabeto padrão (+, /, =). Se o sistema de destino exigir a variante URL-safe, troque + por -, / por _ e remova os = do final.
É proposital. A string original permanece no editor raiz e cada resultado ganha sua aba numerada, assim você pode decodificar vários dados em sequência, conferir um por um e mandar quaisquer dois para a comparação sem colar de novo.
Não há limite artificial; depende da memória da aba. Vários MB passam tranquilo no computador. A codificação é feita em blocos, então entradas muito longas não quebram como uma chamada direta a btoa.
É grátis, sem conta, sem limite de uso e sem marca d'água. Como todas as ferramentas do site, roda no seu dispositivo: seus dados não são enviados nem armazenados em nenhum servidor.
Trabalhando com tokens? O depurador JWT decodifica o token completo (cabeçalho, payload e verificação de assinatura) e complementa bem a decodificação por partes desta página. Para continuar editando o resultado, use o formatador JSON; e para comparar dois resultados, a comparação de JSON continua exatamente de onde a comparação de abas parou.
Cole um texto ou uma string Base64 e codifique ou decodifique com um clique. Se o resultado for JSON, ele é formatado sozinho, e você pode abrir várias abas e compará-las lado a lado. Tudo no navegador, sem enviar nada.
Cole um texto ou Base64 para começar