Base64 é uma forma de representar dados binários arbitrários como texto composto apenas por letras, números e os caracteres +, / e =. Não comprime nem cifra nada: o resultado fica cerca de um terço maior, e qualquer pessoa que conheça o algoritmo pode ler o conteúdo original.
Como funciona a codificação
Os bytes de entrada são agrupados de três em três (24 bits) e divididos em quatro blocos de seis bits. Cada bloco corresponde a um caractere do alfabeto Base64 (A–Z, a–z, 0–9, +, /). Se o comprimento dos dados não for múltiplo de três bytes, o caractere de preenchimento = é adicionado no final.
Para que serve
Muitos protocolos e formatos — e-mail (MIME), URLs, JSON, XML — são pensados para texto e não lidam bem com bytes "crus": bytes nulos, caracteres de controle ou sequências que conflitam com a sintaxe do formato. O Base64 contorna isso transformando qualquer dado binário em texto seguro.
Casos de uso comuns
- Anexos de e-mail via MIME.
- Enviar imagens ou arquivos pequenos dentro de uma API JSON.
- Guardar dados binários em campos de texto de um banco de dados ou arquivo de configuração.
- Codificar as partes header e payload de um JWT.
O que Base64 NÃO é
Não é criptografia nem hashing. Qualquer pessoa pode decodificar uma string Base64 e recuperar os dados originais sem chave ou senha: é apenas um formato de representação, não uma medida de segurança.
Alfabeto padrão e URL-safe
O alfabeto clássico do Base64 usa os caracteres + e /, que têm significado especial em URLs e nomes de arquivo. Para esses casos existe a variante Base64URL, em que + é substituído por - e / por _. Se o resultado da codificação padrão for inserido numa URL sem percent-encoding adicional, os caracteres + e / podem distorcer o endereço ou entrar em conflito com os separadores de caminho.
Erro comum: preenchimento cortado ou "corrompido"
O caractere = no final da string não é lixo, mas parte da codificação, indicando quantos bytes faltam no último bloco. Se a string Base64 for copiada incompleta ou os caracteres de preenchimento forem removidos manualmente, o decodificador retorna um erro ou um resultado truncado. Alguns sistemas (por exemplo, JWT) descartam o = deliberadamente, e nesse caso o comprimento precisa ser restaurado antes de decodificar.