Quando usar Base64 — e quando escolher outra solução
Saiba quando Base64 é adequado para transportar bytes em texto, qual é o custo e por que razão não substitui ficheiros, compressão, hashes ou encriptação.
Base64 representa dados binários com um alfabeto de carateres ASCII. É uma solução de compatibilidade para canais orientados a texto; não comprime, não encripta e não valida os dados.
Como funciona o custo de tamanho
O formato divide os dados em blocos de 3 bytes (24 bits) e produz 4 símbolos de 6 bits. Antes de considerar cabeçalhos ou quebras de linha, o comprimento codificado é:
4 × teto(número_de_bytes / 3)
Para entradas grandes, isto representa cerca de 33% de crescimento. Entradas curtas podem ter uma proporção ainda maior devido ao preenchimento =. A compressão aplicada ao transporte pode reduzir o efeito em alguns conteúdos, mas não elimina o trabalho de codificar e descodificar.
Bons casos de utilização
Campos de texto que precisam de transportar bytes
Uma API JSON pode incluir uma assinatura, uma chave pública ou um pequeno bloco binário quando o esquema não admite bytes diretamente. A documentação deve indicar a variante Base64, o uso de preenchimento e o limite de tamanho.
Protocolos que especificam Base64
MIME, cabeçalhos de autenticação e outros formatos definidos por normas podem exigir uma representação Base64 específica. Nesse caso, siga a norma aplicável em vez de inventar uma variante.
Recursos pequenos e incorporados
Um Data URL pode incorporar uma imagem pequena em HTML ou CSS:
data:image/png;base64,iVBORw0KGgo...
Isto pode ser útil para um recurso minúsculo e autónomo. O tipo MIME e o conteúdo continuam a precisar de validação.
Casos em que costuma ser uma má escolha
Ficheiros grandes em JSON ou numa base de dados
O crescimento do conteúdo aumenta memória, tempo de análise e limites de pedidos. Para ficheiros grandes, o armazenamento de objetos e um URL com autorização adequada costumam ser mais eficientes.
Imagens que beneficiam de cache independente
Uma imagem incorporada num documento não tem a mesma identidade de cache de um ficheiro servido separadamente. Qualquer alteração ao documento pode obrigar a transferir novamente todos os dados incorporados.
Conteúdo que precisa de ficar confidencial
Qualquer pessoa pode descodificar Base64. Para confidencialidade, use encriptação autenticada; para palavras-passe, use uma função de derivação adequada; para integridade, use um MAC ou uma assinatura conforme o modelo de ameaça. Um hash isolado não é encriptação.
Conteúdo já textual
Codificar texto UTF-8 em Base64 sem uma restrição de transporte só aumenta o tamanho e dificulta a inspeção. JSON já representa texto Unicode e dispõe de escapes para carateres especiais.
Perguntas antes de escolher
- O canal aceita bytes diretamente?
- Existe uma norma que imponha Base64 ou Base64url?
- Qual é o tamanho máximo após a codificação?
- É necessário processamento progressivo ou em fluxo?
- O recurso deve ser armazenado em cache separadamente?
- O objetivo real é compatibilidade, integridade ou confidencialidade?
Base64url troca + e / por - e _, sendo mais conveniente em URLs e nomes de ficheiro. Não assuma, porém, que Base64 e Base64url são intercambiáveis: confirme o alfabeto e as regras de preenchimento.
Use o codificador e descodificador Base64 para testar texto ou o conversor de imagem para Base64 para um ficheiro local. Para componentes de URL, prefira o codificador e descodificador de URL; percent-encoding e Base64 resolvem problemas diferentes.