Um guia prático para Base64: bits, preenchimento e validação

Siga os bytes através de grupos de seis bits, calcule o tamanho da saída e distinga Base64 canônico de problemas de formatação recuperáveis.

Base64 é uma representação de bytes usando um alfabeto de texto restrito. É útil quando um transporte aceita texto, mas a carga é binária. A operação é reversível: um decodificador correto recupera os bytes originais, incluindo zeros e valores que não são caracteres válidos. Escolher como interpretar esses bytes é uma etapa separada.

Três bytes tornam-se quatro caracteres

Um byte contém oito bits. Três bytes fornecem 24 bits, que são divididos igualmente em quatro grupos de seis. Cada grupo seleciona um dos 64 caracteres alfabéticos. O alfabeto padrão contém letras maiúsculas, letras minúsculas, dígitos, sinal de adição e barra. Para o texto ASCII Man, os bytes são 4d 61 6e em hexadecimal, e a saída codificada é TWFu.

Input bytes:  01001101 01100001 01101110
Six-bit sets: 010011 010110 000101 101110
Indexes:      19     22     5      46
Output:       T      W      F      u

O preenchimento descreve o grupo final

Quando resta um byte, a saída terá dois caracteres alfabéticos e dois sinais de igual. Dois bytes restantes produzem três caracteres alfabéticos e um sinal de igual. Assim M torna-se TQ==, enquanto Ma torna-se TWE=. O preenchimento faz parte da estrutura; acrescentar sinais de igual aleatórios não recupera um caractere de dados ausente. Para uma codificação canônica, os bits não utilizados do último caractere do alfabeto também devem ser zero.

Para n bytes de entrada, a saída com preenchimento contém 4 × ceil(n / 3) caracteres. Assim, um arquivo de 1.024 bytes gera 1.368 caracteres antes de adicionar um prefixo Data URI ou quebras de linha. Base64 não comprime os dados, embora uma camada de compressão de transporte separada possa reduzir o tamanho final da transferência.

Valide antes de interpretar

Use o modo estrito ao testar um produtor em relação a um protocolo definido. Use o modo de compatibilidade quando uma fonte conhecida tiver inserido quebras de linha ASCII, omitido o preenchimento ou incluído um wrapper de dados URI. Revise os ajustes registrados. Pontuação inesperada, alfabetos mistos e bits não utilizados diferentes de zero merecem investigação, e não exclusão silenciosa.

Finalmente, inspecione os bytes decodificados. Base64 válido pode conter uma sequência UTF-8 inválida, uma imagem truncada ou um PDF incompleto. Uma decodificação bem-sucedida é comprovada apenas pela camada de codificação. Salve os resultados binários como bytes e use o analisador de arquivo apropriado para verificar sua estrutura. As regras do alfabeto, preenchimento e bits canônicos são especificadas em RFC 4648.