Base64
7 tools
O que é codificação?
A codificação é o processo de converter dados de uma representação para outra. No desenvolvimento web, a codificação é usada para transmitir dados com segurança através de canais projetados para um conjunto de caracteres limitado.
A codificação de caracteres define como os caracteres de texto mapeiam para bytes. A codificação Base64 converte dados binários em texto ASCII. A codificação URL torna o texto arbitrário seguro para uso em URLs.
História da codificação de caracteres
A codificação de caracteres é o mapeamento entre caracteres e suas representações binárias:
Código Padrão Americano de 7 bits. 128 caracteres: letras inglesas, dígitos, pontuação e códigos de controle.
ASCII estendido para línguas da Europa Ocidental. Adicionou 128 caracteres. Não adequado para scripts não latinos.
Conjunto de caracteres universal cobrindo todos os sistemas de escrita do mundo. Define pontos de código para mais de 149.000 caracteres.
Codificação de largura variável do Unicode usando 1–4 bytes por caractere. Compatível com ASCII. A codificação dominante na web.
Codificação de largura variável usando 2 ou 4 bytes por caractere. Usado internamente pelo Windows, Java e strings JavaScript.
Codificação de largura fixa: sempre 4 bytes por caractere. Raramente visto na web.
Por que o UTF-8 ganhou
O UTF-8 tornou-se dominante porque é compatível com ASCII, é autossincronizante e eficiente em espaço para texto latino. Qualquer documento ASCII é um documento UTF-8 válido.
Codificação Base64
Base64 converte dados binários em uma representação de texto usando apenas 64 caracteres ASCII imprimíveis. Isso é necessário quando dados binários devem viajar através de canais que só lidam com texto.
Como funciona
Base64 agrupa os bytes de entrada em blocos de 3 bytes e codifica cada bloco como 4 caracteres Base64. Se a entrada não for múltipla de 3 bytes, caracteres de preenchimento = são adicionados:
| Entrada | Bytes hex | Base64 |
|---|---|---|
| "Man" | 77 61 6E | TWFu |
| "Ma" | 4D 61 | TWE= |
| "M" | 4D | TQ== |
Os caracteres de preenchimento = indicam quantos bytes faltavam para completar o último grupo de 3 bytes. O Base64 padrão sempre produz saída com comprimento múltiplo de 4.
Codificação URL
URLs só podem conter um conjunto limitado de caracteres ASCII seguros. Qualquer caractere fora desse conjunto deve ser codificado em porcentagem antes de ser colocado em uma URL.
A codificação de porcentagem substitui cada byte inseguro por % seguido de dois dígitos hexadecimais representando o valor desse byte.
Caracteres comumente codificados
| Caractere | Codificado | Notas |
|---|---|---|
| Space | %20 | Mais comum; usado em envios de formulário como + em application/x-www-form-urlencoded |
| & | %26 | Separador de string de consulta; deve ser codificado quando usado como valor literal |
| = | %3D | Separador chave-valor em strings de consulta; codificar quando usado como dado |
| + | %2B | Interpretado como espaço em application/x-www-form-urlencoded; codificar para preservar + |
| # | %23 | Identificador de fragmento; codificar quando usado como dado literal |
| / | %2F | Separador de segmento de caminho; codificar quando usado como dado literal |
| : | %3A | Separador de esquema; codificar em contextos de caminho e consulta |
| @ | %40 | Usado em mailto: e auth; codificar quando usado como dado literal |
encodeURI vs encodeURIComponent
JavaScript fornece duas funções de codificação com escopos diferentes. encodeURI codifica uma URL completa. encodeURIComponent codifica um componente de URL — codifica todos os caracteres exceto A-Z, a-z, 0-9, -, _, ., ~.
Onde a codificação aparece no desenvolvimento web
O cabeçalho Authorization: Basic codifica credenciais como Base64(usuário:senha). Isso é codificação para conveniência de transporte, NÃO segurança. Sempre use HTTPS com Basic Auth.
URIs de dados incorporam conteúdo de arquivo diretamente em HTML ou CSS: data:image/png;base64,.... Codificar imagens elimina solicitações HTTP.
O e-mail foi projetado para ASCII de 7 bits. Anexos binários são codificados em Base64 pelo MIME antes da transmissão.
Os tokens JWT usam codificação Base64url para as três partes. Isso torna os tokens seguros para URLs.
Qualquer dado fornecido pelo usuário em strings de consulta URL deve ser codificado em porcentagem.
Nomes de domínio não ASCII são codificados usando Punycode (prefixo xn--) para compatibilidade com o sistema DNS.
Perguntas frequentes
Não. Base64 é codificação, não criptografia. É uma transformação reversível sem chave secreta. Nunca use Base64 como medida de segurança.
Base64 processa entrada em grupos de 3 bytes. Se a entrada não for múltipla de 3, preenchimento = é adicionado.
Base64url é uma variante segura para URLs que substitui + por - e / por _, e tipicamente omite o preenchimento =. Os JWTs usam Base64url.
Use encodeURIComponent para valores individuais. Use encodeURI para uma string URL completa onde você quer preservar os caracteres de estrutura de URL.
UTF-8 é compatível com ASCII e eficiente em espaço para texto latino. HTTP e HTML usam UTF-8 por padrão.
A codificação de porcentagem representa caracteres como % seguido de seu valor de byte hexadecimal. Um espaço é %20.
Base64 aumenta o tamanho dos dados em ~33% e adiciona sobrecarga de CPU. A codificação URL adiciona sobrecarga mínima.
Punycode é uma codificação para representar caracteres Unicode no sistema DNS compatível com ASCII. Domínios como münchen.de se codificam como xn--mnchen-3ya.de.