O que é a codificação Base64 e quando você deve usá-la

· 9 min de leitura

Se você trabalha com APIs, sistemas de email ou desenvolvimento web, já encontrou Base64 mesmo sem reconhecer. Aquelas longas strings de letras e números que parecem confusão no início de um anexo de email, numa URL data: em CSS, ou no segmento do meio de um token JWT? Isso é Base64. É uma das peças mais antigas e silenciosamente centrais do encanamento da internet, e quase todo software que você usa se apoia nela em algum ponto.

Breve história do Base64

Base64 faz parte de uma família chamada «radix-64» ou «codificações imprimíveis», cujo trabalho é representar bytes arbitrários usando só o pequeno alfabeto de caracteres que um sistema baseado em texto garante passar sem alteração. O primeiro membro amplamente usado é o uuencode, escrito por Mary Ann Horton em UC Berkeley por volta de 1980 para mover arquivos binários por Usenet e email numa época em que esses sistemas corrompiam tudo acima de ASCII 7 bits.

O alfabeto do Base64 foi padronizado pela primeira vez na RFC 989 (1987) para Privacy-Enhanced Mail (PEM), uma primeira tentativa de email assinado e cifrado. PEM morreu, mas seu esquema de codificação sobreviveu e foi canonizado na RFC 1421 (1993) e depois na especificação MIME (RFC 1521 e 1522 em 1993, revisadas para RFCs 2045-2049 em 1996). MIME fez do Base64 o jeito padrão de anexar arquivos binários a emails, e dali a codificação se espalhou para quase todo transporte só-texto na internet.

Em 2006, o IETF consolidou as definições espalhadas de Base64 na RFC 4648, que define Base64, Base32 e Base16 num único documento. A RFC 4648 também definiu a variante URL-safe na seção 5, que trocou os dois caracteres não amigáveis a URL (+ e /) por - e _. JSON Web Tokens (RFC 7519, 2015) padronizou em Base64 URL-safe com o padding removido. Hoje, cada anexo de email, cada certificado codificado em PEM, cada URL data:, cada JWT e cada fronteira de upload multipart depende de Base64.

Como o Base64 funciona: a matemática

Base64 pega três bytes de entrada (24 bits) e os reescreve como quatro caracteres de saída (6 bits cada), usando um alfabeto de 64 símbolos. O mapeamento é fixo:

Faixa de índiceCaracteres
0-25A-Z
26-51a-z
52-610-9
62+ (padrão) ou - (URL-safe)
63/ (padrão) ou _ (URL-safe)

Então Hello vira:

A saída é sempre múltiplo de 4 caracteres. Se o tamanho de entrada módulo 3 for 1, você ganha dois caracteres = de padding; se for 2, um; se for 0, nenhum. O padding às vezes é removido (notavelmente em JWT e em fragmentos de URL) e espera-se que os decodificadores tolerem isso.

O overhead de 33 % vem dessa expansão 3-para-4: cada 3 bytes de entrada viram 4 caracteres de saída, um aumento de um terço. Não há como reduzir sem mudar o alfabeto (Base85 / Ascii85 expande só 25 % usando 85 caracteres imprimíveis, ao custo de um codificador mais complexo).

Casos de uso comuns

Anexos de email. SMTP, o protocolo que carrega 95 % dos emails entre servidores, foi projetado em 1982 (RFC 821) para ASCII de 7 bits. Todo anexo binário que você manda (uma imagem, um PDF, um ZIP) é codificado em Base64 pelo seu cliente de email antes da transmissão e decodificado pelo do destinatário. Os cabeçalhos MIME no email dizem ao destinatário quais partes são Base64 e quais são texto puro.

URLs data em HTML e CSS. Uma URL data:image/png;base64,iVBORw0KGgo... embute um arquivo binário direto no documento. Útil para ícones pequenos abaixo de 1-2 KB, onde a requisição HTTP economizada vale mais que o overhead de 33 % e a perda de cache.

Cargas úteis de API. Quando uma API JSON ou XML precisa aceitar um valor binário (um arquivo enviado, uma assinatura, uma foto de perfil), o padrão é codificar os bytes em Base64 e mandar como campo de string. O receptor decodifica no servidor. É assim que a entrada de imagem do OpenAI funciona, como o Stripe recebe uploads de arquivos e como a maioria das funções cloud aceita entrada binária.

HTTP Basic Authentication. O cabeçalho Authorization: Basic <token> carrega um par username:password codificado em Base64 (RFC 7617). É codificação, não criptografia: quem vir o cabeçalho vê a senha. Basic Auth exige HTTPS por essa razão.

Certificados e chaves. Arquivos PEM (-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----) envolvem um blob de bytes ASN.1 codificados em DER, codificados em Base64. Todo certificado TLS, todo arquivo de chave SSH, todo certificado de assinatura de código é Base64 dentro de um envelope PEM.

Tokens JWT. Um JWT são três segmentos Base64 URL-safe separados por pontos: <header>.<payload>.<signature>. A codificação Base64 permite que um JWT viaje seguro em cabeçalhos, URLs e cookies.

Como codificar e decodificar

  1. Escolha codificar ou decodificar: selecione a direção da conversão.
  2. Cole texto ou envie um arquivo: digite texto diretamente ou arraste e solte um arquivo (até 5 MB para codificação no navegador).
  3. Escolha a variante: Base64 padrão para email e certificados, URL-safe para JWT e fragmentos de URL. A ferramenta usa padrão por default.
  4. Copie o resultado: a saída atualiza no instante. Copie para a área de transferência, ou use o botão de download para saídas longas.

Variantes do Base64

Várias codificações tipo Base64 existem para situações específicas:

VarianteDiferençasOnde se usa
Padrão (RFC 4648 §4)A-Z, a-z, 0-9, +, /, = paddingEmail (MIME), PEM, transporte binário genérico
URL-safe (RFC 4648 §5)+ vira -, / vira _JWT, fragmentos de URL, nomes de arquivo
MIME (RFC 2045)Quebras de linha a cada 76 caracteresCorpo de email, cabeçalhos (com =?utf-8?B?...?=)
crypt(3) / htpasswdAlfabeto diferente (./0-9A-Za-z)Hashes antigos de senha Unix (baseados em DES)
Base64Url sem paddingURL-safe sem = no finalJWT (conforme RFC 7515)
Base32 (RFC 4648 §6)Alfabeto de 32 caracteres, insensível a maiúsculasSegredos TOTP, endereços Onion
Base58Alfabeto de 58 caracteres (sem 0, O, I, l)Endereços Bitcoin, CIDs IPFS
Ascii85 / Base85Alfabeto de 85 caracteres, overhead 25 %PDF, PostScript

Na maioria das vezes você quer Base64 padrão ou URL-safe. Os outros aparecem em protocolos específicos.

Quando usar Base64

Use quando:

Não use quando:

Armadilhas comuns

Alternativas e codificações vizinhas

Base64 é o padrão, não a única opção. A escolha certa depende do canal e do orçamento de tamanho.

CodificaçãoOverheadForçaMelhor para
Hex (Base16)100 %Trivial de ler, cada byte são dois caracteresSaída de debug, identificadores curtos, códigos de cor
Base32 (RFC 4648)60 %Insensível a maiúsculas, sem caracteres ambíguosSegredos TOTP, endereços Onion, ditado por voz
Base64 padrão33 %Universal, toda linguagem temEmail, PEM, transporte genérico
Base64 URL-safe33 %Seguro para URL e nome de arquivoJWT, fragmentos de URL
Base58~37 %Sem confusão 0/O/I/l, sem caracteres especiaisEndereços Bitcoin, CIDs IPFS
Ascii85 / Base8525 %Mais denso que Base64PDF, PostScript
Base91~22 %Ainda mais denso, mais complexoRaro, contextos de compressão de nicho
Upload multipart0 %Transporte binário nativo via HTTPUploads de arquivos (navegadores fazem por você)
gzip + Base64variaÀs vezes menor que Base64 cruCargas pré-comprimidas

Para a maior parte do trabalho diário, a resposta é Base64 (padrão ou URL-safe). Para uploads binários via HTTP, a resposta certa geralmente é multipart/form-data, que não codifica nada.

Privacidade e o codificador

O codificador e decodificador Base64 roda inteiramente no seu navegador. O texto ou arquivo que você insere é processado por JavaScript no seu dispositivo, o resultado é renderizado na página, e nada é enviado a um servidor. Nada é registrado, nada é guardado depois que você sai da página, e nenhuma tag de analytics vê o conteúdo. Para coisas que você poderia codificar em Base64 (certificados PEM, chaves privadas, cargas úteis JWT de sistemas de produção, rascunhos de requisições API com dados reais de cliente), esse fluxo estritamente local é o padrão correto. A ferramenta inteira pode rodar offline depois que a página carrega, o que você pode verificar desligando a rede e recodificando a mesma entrada.

Perguntas frequentes

A codificação Base64 protege meus dados?

Não. Base64 é codificação, não criptografia. Qualquer um pode decodificar uma string Base64, não fornece segurança alguma. Se precisa proteger dados, use criptografia real (AES, RSA etc.).

Por que o Base64 deixa os arquivos maiores?

A codificação Base64 aumenta o tamanho dos dados em aproximadamente 33%. Três bytes de dados binários viram quatro caracteres Base64. Essa sobrecarga é o trade-off para poder transmitir dados binários com segurança como texto.

Posso codificar arquivos, não apenas texto?

Sim. Qualquer arquivo (imagens, PDFs, áudio) pode ser codificado em Base64. Isso é comumente usado para incorporar pequenas imagens diretamente em HTML ou CSS como URLs de dados.

Quando NÃO devo usar Base64?

Não use para arquivos grandes. Uma imagem de 1 MB vira 1,33 MB como texto Base64, e o navegador não pode cachear separadamente. Para qualquer coisa acima de alguns KB, servir o arquivo normalmente é mais eficiente.

What is the difference between standard Base64 and URL-safe Base64?

Standard Base64 (RFC 4648 section 4) uses the characters A-Z, a-z, 0-9, +, / with = padding. URL-safe Base64 (RFC 4648 section 5) swaps + for - and / for _ so the string is safe to drop into a URL or a filename without percent-encoding. JWT tokens use the URL-safe variant.

Why does Base64 sometimes have one or two = signs at the end?

The = is padding. Base64 encodes input in 3-byte groups; if the input length is not a multiple of 3, the last group is padded with zero bits and one or two = characters mark the missing bytes. One = means one missing byte, two = means two missing bytes.