Base64 é uma das codificações mais usadas na web, e uma das menos entendidas. Aparece em tokens JWT, anexos de e-mail, data URLs, payloads de API, chaves SSH e certificados TLS. Mas muitos desenvolvedores a conhecem quando algo quebra — um JWT que não decodifica, um PNG embutido em CSS que aparece quebrado, ou uma API que rejeita um upload binário. Este guia explica o que Base64 realmente é, por que foi inventada e quando usá-la — ou não.
O que Base64 faz
Essencialmente, Base64 pega dados binários arbitrários e os re-expressa usando apenas 64 caracteres ASCII imprimíveis e seguros: A–Z, a–z, 0–9, mais + e /. Três bytes de entrada (24 bits) viram quatro caracteres (6 bits cada). O resultado é aproximadamente 33% maior que a entrada, mas não contém nada que possa confundir sistemas orientados a texto: sem quebras de linha, sem caracteres de controle, sem bytes não-ASCII.
Por que existe
Os primeiros protocolos de e-mail (SMTP, MIME) foram desenhados em torno de ASCII de 7 bits. Para anexar um PDF ou uma foto, os bytes crus seriam corrompidos por servidores intermediários que alegremente apagavam o bit alto ou inseriam retornos de carro. Base64 resolveu o problema fazendo o binário parecer texto comum. O mesmo problema reaparece em payloads JSON, parâmetros de URL, cabeçalhos HTTP e corpos XML — em qualquer lugar que pressuponha texto. Base64 é o adaptador universal.
Casos de uso comuns hoje
- Data URLs —
data:image/png;base64,iVBORw0KGgo…incorpora uma imagem diretamente em HTML ou CSS, útil para ícones minúsculos que não justificam uma requisição HTTP separada. - JWTs — o cabeçalho e o payload de um JSON Web Token são JSON codificado em base64url.
- MIME de e-mail — anexos vêm em partes com
Content-Transfer-Encoding: base64. - Binário em APIs JSON — para enviar um arquivo por um endpoint JSON, Base64 em um campo string mantém tudo válido.
- Arquivos de chave SSH/TLS — o formato PEM envolve Base64 em linhas
BEGIN/END.
Base64 não é criptografia
Merece uma seção própria porque o erro é comum e caro. Base64 não tem segredo: qualquer um com a string codificada pode decodificá-la em uma linha de console. Nunca use Base64 para proteger senhas, chaves de API ou dados de usuário. Se você vir credenciais "ofuscadas" com Base64 no código-fonte, trate-as como texto puro. Use criptografia real (AES, NaCl, libsodium) para tudo que precise realmente ser secreto.
Variantes importantes
Base64 padrão usa + e /, que não são seguros em URLs. base64url os substitui por - e _ e descarta o padding = — é o que JWTs e APIs web modernas usam. Existem também variantes MIME com linhas quebradas a 76 caracteres e implementações antigas incorretas que você encontrará ocasionalmente. Em caso de dúvida, verifique se o decodificador aceita exatamente o alfabeto produzido pela origem.
Custo de tamanho
Três bytes entram, quatro caracteres saem. O custo exato é 4⁄3 ≈ 33% antes do padding ou quebra de linha. Para ativos pequenos inline costuma valer a pena; para qualquer coisa maior que alguns kilobytes, considere uma requisição HTTP separada.
Quando usar
Use Base64 quando dados binários precisam viajar por um canal apenas de texto e o tamanho não for crítico. Use criptografia real quando a confidencialidade importa. E ao depurar — cole primeiro em um decodificador Base64 antes de supor que o token está quebrado; nove em cada dez vezes o token está bem e o sistema que o desempacota espera um padding ou alfabeto diferente.
