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

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.