Desenvolvimento · 4 min de leitura ·
Base64 explicado: para que serve e por que não é criptografia
Base64 aparece em e-mails, data URIs, cabeçalhos de API e JWTs. Como ele funciona, por que deixa os dados um terço maiores e por que nunca esconde nada.

Base64 está em todo lugar no software: anexos de e-mail, imagens embutidas no CSS, o cabeçalho Authorization do HTTP Basic e as partes de um JWT. Ele tem uma única função: escrever qualquer dado, inclusive bytes binários, usando só caracteres de texto seguros.
Como funciona
O Base64 pega os dados de três em três bytes (24 bits) e os divide em quatro grupos de 6 bits. Cada grupo é um número de 0 a 63 que corresponde a um de 64 caracteres: A-Z, a-z, 0-9, + e /. Quando a entrada não se divide em grupos de três, sinais de = completam o final.
Texto M a n
Bytes 01001101 01100001 01101110
6 bits 010011 010110 000101 101110
Base64 T W F u → TWFu
Por que ele existe
Muitos sistemas antigos, principalmente o e-mail, foram feitos para texto e podiam estragar bytes arbitrários. O Base64 transforma qualquer coisa em caracteres comuns que passam por esses canais sem mudança. O preço é o tamanho: cada 3 bytes viram 4 caracteres, então os dados codificados ficam cerca de 33% maiores.
Não é criptografia
Não existe chave. Qualquer um decodifica Base64 na hora, então ele não esconde nada. Uma senha num cabeçalho Basic (dXNlcjpwYXNz é só user:pass) fica tão exposta quanto texto puro. Proteja segredos com HTTPS e criptografia de verdade, e nunca trate Base64 como medida de segurança.
Variantes que você vai encontrar
O Base64url troca + e / por - e _ e costuma tirar o preenchimento, então o resultado é seguro em URLs e nomes de arquivo; os JWTs usam essa variante. As data URIs colocam os dados codificados direto no código, como data:image/png;base64,iVBOR…, o que poupa uma requisição para imagens minúsculas mas pesa nas maiores.
O tamanho em números
O tamanho codificado é 4 × ceil(n / 3) caracteres para n bytes, então o acréscimo é de cerca de 33%, mais as quebras de linha se o codificador as adicionar.
Imagem de 100 KB → cerca de 133 KB de Base64
Anexo de 1 MB → cerca de 1,33 MB (mais quebras de linha no e-mail)
Por que a decodificação falha
- Falta de preenchimento: alguns sistemas removem os sinais = do final, e decodificadores rígidos recusam a entrada. Acrescente = até o tamanho ser múltiplo de 4.
- O alfabeto errado: o Base64url usa - e _ no lugar de + e /. Decodifique com um decodificador Base64url ou troque os caracteres de volta antes.
- Quebras de linha e espaços: o e-mail (MIME) quebra o Base64 a cada 76 caracteres. A maioria dos decodificadores ignora as quebras, mas nem todos.
- Texto na codificação errada: a decodificação devolve bytes. Se eram texto UTF-8 mas forem lidos como Latin-1, acentos e hebraico viram caracteres estranhos.
A armadilha do btoa no JavaScript
A função btoa() do navegador só aceita caracteres do Latin-1 e gera erro com hebraico, chinês ou emojis. Codifique o texto primeiro em bytes UTF-8, por exemplo com TextEncoder, e depois em Base64.
Quando usar e quando não usar
O Base64 é a ferramenta certa quando dados binários precisam passar por um canal feito para texto: payloads JSON e XML, e-mail, data URIs e cabeçalhos HTTP. Ele é a ferramenta errada para esconder dados, para reduzi-los (eles sempre crescem) e para guardar arquivos grandes em um banco de dados, onde uma coluna binária ou um armazenamento de objetos é menor e mais rápido. Se o destino aceita bytes brutos, envie bytes brutos.
Experimente
O codificador Base64 da 4Dev converte texto em Base64 enquanto você digita. Ele usa UTF-8, então acentos, ç, emoji e qualquer outro texto não inglês são codificados corretamente. Para o caminho inverso, use o decodificador Base64.