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:
Man → TWFu — Toda string Base64 que você encontrar funciona exatamente como esta — incluindo as que se escondem em JWTs e data URIs.
= completa o comprimento até um múltiplo de 4 quando a entrada não é múltiplo exato de 3 bytes.dXNlcjpwYXNz consegue lê-lo. Nunca trate uma senha ou chave de API codificada em Base64 como protegida.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.
Uma URL como data:image/png;base64,iVBORw0KGgo… embutida em HTML, CSS ou num bundle do webpack.
Copie tudo depois de base64,, cole aqui e pressione Decode & Format.
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.
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.
Copie o segmento central entre os pontos, cole aqui e pressione Decode & Format. Ou abra o token inteiro no depurador JWT.
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.
Um cabeçalho HTTP como Authorization: Basic dXNlcjpwYXNz num dump de requisições ou log de proxy.
Copie apenas a parte depois de Basic, cole aqui e pressione Decode & Format.
As credenciais em texto claro — aqui user:pass. Um lembrete útil: a autenticação Basic só protege algo porque viaja dentro de HTTPS.
Uma parede de letras quebradas sob Content-Transfer-Encoding: base64 ao ver o código-fonte de um e-mail ou um arquivo .eml.
Junte primeiro as linhas quebradas numa única string (quebras de linha internas não fazem parte do alfabeto), depois cole e pressione Decode & Format.
O conteúdo textual daquela parte da mensagem. Anexos realmente binários decodificam como ruído pela mesma razão das data URIs PNG.
Um campo como "payload": "eyJ1c2VySWQiOjQyfQ==" dentro de uma resposta de API — algum serviço enfiou dados codificados onde se esperava texto.
Copie o valor, cole aqui e pressione Decode & Format.
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.
Duas direções, dois botões, zero configuração. Ambos rodam inteiramente no seu navegador — nada é enviado, nada é registrado.
+ e /) com o preenchimento = correto.= ou sem.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 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.
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ê.
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.
É 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.
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.
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.
Cole texto ou Base64 abaixo — codifique, decodifique direto para JSON formatado com sessões em abas e comparação lado a lado. Tudo roda localmente no seu navegador.
Paste Text or Base64 to get started