Codificação Base64 e URL Encoding (RFC 4648 & RFC 3986)
Como converter fluxos binários para representações textuais seguras na Web sem perder acentuação ou dados especiais.
O que é o Base64 e Como Ele Funciona?
O Base64 é um método de codificação que divide sequências binárias de 8 bits em blocos de 6 bits. Como 26 = 64, cada bloco é mapeado para um conjunto de 64 caracteres imprimíveis da tabela ASCII (A-Z, a-z, 0-9, + e /, com = como preenchimento).
Atenção: Base64 não é criptografia! Trata-se de uma codificação de transporte, usada para enviar anexos em e-mails (MIME), tokens JWT e embutir imagens em CSS ou HTML sem requisições adicionais.
URL Encoding (Percent-Encoding)
Certos caracteres em URLs têm significados reservados pelo protocolo HTTP (como ?, &, =, / e espaços).
O URL Encoding converte esses caracteres em seu código hexadecimal precedido de % (por exemplo, um espaço vira %20 ou +). Essa conversão garante que parâmetros de busca (query strings) cheguem intactos ao servidor backend.
Comparativo: Base64 Padrão vs Base64URL vs URL-Encoding
| Padrão | RFC Oficial | Caracteres Característicos | Aplicação Principal |
|---|---|---|---|
| Base64 Padrão | RFC 4648 §4 | Usa +, / e padding = | E-mails MIME, XML, certificados PEM e imagens embutidas. |
| Base64URL | RFC 4648 §5 | Substitui + por - e / por _ (sem =) | JSON Web Tokens (JWT), OAuth2 tokens e parâmetros REST em URLs. |
| Percent-Encoding | RFC 3986 | Prefixo % seguido por 2 dígitos hexadecimais | Query strings de formulários HTTP, parâmetros GET e URLs amigáveis. |
Perguntas Frequentes sobre Base64 (FAQ)
Por que o Base64 aumenta o tamanho original do arquivo em ~33%?
Como cada grupo de 3 bytes (24 bits) é redividido em 4 caracteres de 6 bits na saída, são necessários 4 bytes para representar o que antes ocupava 3. Isso gera um overhead matemático fixo de 33% no tamanho da carga de dados.
O que significam os sinais de igual (=) no final de uma string Base64?
Os caracteres = atuam como caracteres de preenchimento (padding) quando a quantidade total de bytes de entrada não é múltipla exata de 3, garantindo que o comprimento total seja sempre divisível por 4.