Codificar e decodificar Base64

Cole qualquer texto e converta para Base64, ou cole uma string Base64 e receba o texto original de volta. Caracteres acentuados e emoji são tratados corretamente (UTF-8).

A conversão acontece no seu navegador: nada é enviado nem armazenado em lugar nenhum.

Para que serve a codificação Base64?

O Base64 transforma qualquer sequência de bytes em um texto formado apenas por letras, números, +, / e =. Você vai encontrá-lo em todo lugar: imagens embutidas em CSS e e-mails (data URIs), o cabeçalho Authorization: Basic das requisições HTTP e as duas primeiras partes de um JWT. Lembre-se de que ele não é criptografia: qualquer pessoa consegue decodificá-lo. Sua única função é levar dados binários por canais que só aceitam texto simples.

Por que o suporte a UTF-8 importa

A função nativa do navegador btoa() usada sozinha, falha com letras acentuadas, símbolos como “€” e emoji, porque só aceita caracteres de 8 bits. Esta ferramenta primeiro converte seu texto em bytes UTF-8 com TextEncoder, então strings como “café” e “🙂” são codificadas e decodificadas sem erros, gerando exatamente o mesmo resultado que você obteria em Python ou Node.js.

Base64 não é criptografia

Este é o mal-entendido mais comum e mais perigoso: o Base64 é uma codificação reversível, sem chave, e qualquer pessoa a decodifica em um segundo. Um token, uma senha ou dados pessoais “protegidos” com Base64 estão às claras para todos os efeitos práticos.

A função dele é outra: fazer bytes quaisquer passarem por um canal que só aceita texto. Ele nasceu para anexos de e-mail, que só podem carregar caracteres imprimíveis, e por isso hoje aparece em JSON, em URLs e dentro de páginas HTML.

Por que ocupa um terço a mais de espaço

O Base64 pega três bytes por vez e os escreve como quatro caracteres: daí os 33% de aumento, mais o eventual preenchimento com o sinal “=”. É um custo fixo e inevitável, não um defeito da implementação.

Na prática, essa conta pesa quando você incorpora imagens em páginas: uma foto de 300 kB vira 400 kB de texto dentro do HTML, não fica em cache separado e é baixada de novo a cada visita. Só faz sentido para ícones bem pequenos, em que você economiza uma requisição de rede.

O acento que quebra tudo

A função do navegador btoa() só funciona com bytes até 255, por isso falha com qualquer caractere fora do latim básico: um “è”, um “ã”, um emoji ou um ideograma. A mensagem de erro fala de caracteres fora do intervalo e não diz nada sobre o problema real.

A solução correta é converter o texto em bytes UTF-8 antes e só então codificá-los, fazendo o caminho inverso na volta. É por isso que uma string codificada por um programa pode sair ilegível em outro: o que muda não é o Base64, é a etapa de texto para bytes.

Veja também

Para imagens existe uma página específica, Base64 para imagem. Para endereços da web, que usam outras regras de codificação, veja Codificar e decodificar URL, e para verificar a integridade de um arquivo, o Checksum de arquivo.

Ferramentas relacionadas