⇄ Base64 & URL Todas as ferramentas →

Codificador e Decodificador Base64

Base64 e URL encode/decode com UTF-8 correto — acentos e emoji não viram lixo.

Texto normal
Texto codificado
espaço publicitário

Como o Base64 funciona por dentro

O Base64 pega os bytes originais e os reagrupa em blocos de 6 bits. Como 6 bits produzem 64 combinações possíveis, cada bloco vira um caractere de um alfabeto fixo: A-Z, a-z, 0-9, + e /. Na prática, cada 3 bytes de entrada viram 4 caracteres de saída — daí o crescimento de aproximadamente 33% no tamanho.

Quando os bytes não fecham um grupo de 3, entra o padding: um ou dois sinais de = no final, só para completar o bloco de 4 caracteres. Por isso todo Base64 padrão tem comprimento múltiplo de 4, e por isso um texto colado pela metade quase sempre falha na decodificação.

TextoBytes (UTF-8)Base64
a1YQ==
ab2YWI=
abc3YWJj
Olá4 (o á ocupa 2)T2zDoQ==
ação6YcOnw6Nv
São Paulo10U8OjbyBQYXVsbw==

Repare em Olá: são três letras, mas quatro bytes. Acentos, cedilha e emoji ocupam mais de um byte em UTF-8, e é exatamente aí que ferramentas mal feitas quebram.

Passo a passo

Acentos e emoji: o bug clássico do btoa

O JavaScript tem a função btoa(), que só aceita caracteres de 0 a 255. Chamar btoa("ação") lança InvalidCharacterError, e muitas ferramentas antigas contornam isso descartando bits — o resultado decodifica como a��o.

A solução correta é converter o texto para bytes UTF-8 antes de codificar, com TextEncoder, e fazer o caminho inverso com TextDecoder na volta. É o que esta página faz, então coração, ç, ã e emoji atravessam íntegros nas duas direções.

Onde o Base64 aparece no dia a dia dev

Base64 não é segurança

Vale repetir com todas as letras: Base64 é codificação reversível por definição, sem chave nenhuma. "Senha guardada em Base64 no banco" é senha em texto claro com um passo a mais. O mesmo vale para "esconder" o CPF do cliente numa URL ou mascarar uma chave de API no código do front-end — o valor está lá, visível para quem abrir o DevTools.

Para senhas, o caminho é hash com algoritmo próprio para isso (bcrypt, scrypt, Argon2). Para dados que precisam voltar ao original, é criptografia de verdade, com chave gerenciada fora do código. Base64 entra depois, se você precisar transportar o resultado binário da criptografia por um canal de texto.

Base64, Base64URL e hexadecimal

CodificaçãoAlfabetoAumento de tamanhoUso típico
Base64 padrãoA-Z a-z 0-9 + / =+33%E-mail, data URI, PEM, campos JSON
Base64URLA-Z a-z 0-9 - _+33%JWT e valores dentro de URLs, onde + e / atrapalham
Hexadecimal0-9 a-f+100%Hashes, cores, dumps de memória — mais legível, mas o dobro do tamanho
URL encodetexto + %XXvariávelParâmetros de URL e formulários

URL encode: quando e por quê

Use sempre que um valor com espaço, acento ou símbolo entra numa URL: busca interna, UTMs com nome de campanha composto, links de WhatsApp com mensagem pronta. O que acontece é a substituição do caractere pelo seu byte em hexadecimal, precedido de %.

CaractereCodificadoPor que precisa
espaço%20Encerra a URL em muitos parsers e clientes de e-mail
&%26Separa parâmetros — sem escape, o valor é cortado ali
#%23Inicia o fragmento; tudo depois dele nem chega ao servidor
+%2BEm formulários, + significa espaço — comum quebrar telefone +55
ç%C3%A7Dois bytes em UTF-8, logo dois grupos percentuais
/%2FSeparador de caminho; sem escape vira uma rota diferente

Assim, promoção verão vira promo%C3%A7%C3%A3o%20ver%C3%A3o e chega intacto ao servidor. E pedido#42 vira pedido%2342 — sem isso, o servidor receberia só pedido.

Erros comuns na decodificação

Perguntas frequentes

Para que serve o sinal de igual no final do Base64?
É o padding. O Base64 trabalha em blocos de 3 bytes que viram 4 caracteres; quando o último bloco fica incompleto, entram um ou dois = para fechar o grupo. Por isso todo Base64 padrão tem tamanho múltiplo de 4.

Qual a diferença entre Base64 e Base64URL?
O Base64URL troca + e / por - e _, e normalmente remove o padding, porque + e / têm significado especial dentro de uma URL. É a variante usada em tokens JWT e em parâmetros de link.

Base64 aumenta o tamanho do arquivo?
Sim, em cerca de 33%: cada 3 bytes viram 4 caracteres. Uma imagem de 300 KB embutida como data URI ocupa aproximadamente 400 KB no HTML ou CSS. Por isso só compensa embutir arquivos pequenos.

Posso decodificar um token JWT aqui?
Sim, mas parte por parte: separe o token nos trechos delimitados por ponto e cole cada um. O primeiro é o cabeçalho, o segundo é o payload. O terceiro é a assinatura binária e não vira texto legível.

Quando devo usar URL encode em vez de Base64?
URL encode quando o valor vai dentro de um endereço — parâmetros de busca, UTMs, links de WhatsApp com mensagem pronta. Base64 quando você precisa transportar dados binários ou com quebras de linha por um canal que só aceita texto simples.