YamlBox

Web e codificação · 5 min de leitura

Base64 decodificar e codificar: para transporte, não para

Base64 existe para mover dados binários através de canais que aceitam apenas texto. Ele mapeia cada três bytes em quatro caracteres imprimíveis, e é por isso que a saída codificada é cerca de um terço maior que a entrada e porque uma decodificação base64 é totalmente reversível – sem chave, porque base64 é codificação, não criptografia. Qualquer um pode decodificar qualquer coisa que você codifique, e qualquer ferramenta que sugira o contrário está mentindo para você.

Atualizado

O alfabeto e o preenchimento

O alfabeto padrão é `A–Z`, `a–z`, `0–9`, `+` e `/`, com `=` preenchendo o grupo final quando o comprimento da entrada não for múltiplo de três. Esse preenchimento não é decorativo: informa ao decodificador quantos bytes o último grupo carrega. A remoção é comum em URLs e funciona porque os decodificadores inferem o comprimento, mas implementações estritas rejeitarão o formato não preenchido.

                "YamlBox"  →  WWFtbEJveA==
"YamlBo"   →  WWFtbEJv
              

base64url: a variante que termina em tokens

URLs tratam `+`, `/` e `=` como significativos, então a variante base64url os substitui por `-` e `_` e muitas vezes omite completamente o preenchimento. Cada Web Token JSON usa esse alfabeto, e é por isso que uma carga útil JWT colada em um decodificador Base64 estrito pode falhar em caracteres que parecem perfeitamente comuns. Se uma string for decodificada para algo quase legível, mas não totalmente legível, você geralmente estará a uma troca de alfabeto da resposta.

Onde você encontra isso na prática

  • URIs de dados — incorporação de pequenas imagens e fontes diretamente em CSS ou HTML como `data:image/png;base64,…`.
  • JSON Web Tokens — cada um dos três segmentos é codificado em base64url.
  • Autenticação HTTP básica — `Authorization: Basic` carrega base64 de `user:password`, e é por isso que deve sempre viajar por TLS.
  • Anexos de e-mail — MIME usa base64 para partes binárias desde 1980.
  • APIs que não podem aceitar cargas e chaves binárias de imagem colocadas em campos somente de texto.

Por que a saída de decodificação Base64 parece lixo

A falha clássica é o Unicode. Os antigos `btoa` e `atob` do JavaScript operam em um byte por caractere, portanto, uma string contendo `é`, `₹` ou qualquer emoji lança ou produz mojibake. A solução é codificar primeiro os bytes UTF-8 — `TextEncoder` no navegador, `Buffer.from(str, "utf8")` no Node — e depois base64. Se uma decodificação retornar caracteres de aparência plausível, mas errados, a causa mais provável é que o codificador nunca converteu o texto em bytes UTF-8.

Base64 não fornece confidencialidade ou integridade. Trate um segredo codificado exatamente como trataria um segredo bruto, porque é isso que realmente é.

Por que decodificar localmente

Cabeçalhos de autenticação básica, tokens e URIs de dados são todos decodificados em credenciais ou dados privados, portanto, colá-los em um decodificador do lado do servidor é uma divulgação. O codificador/decodificador YamlBox Base64 funciona na página com manipulação UTF-8 feita corretamente, suporta alfabetos padrão e URL seguros e funciona offline.

Base64 Codificador / Decodificador — perguntas frequentes

Base64 é criptografia?

Não. É uma codificação reversível sem chave, portanto qualquer pessoa pode decodificá-la. Ele existe para que os dados binários possam viajar através de canais somente de texto – nunca para proteger os dados. Use TLS e criptografia real, como AES-GCM, para confidencialidade.

Quanto maior é a saída Base64?

Exatamente um terço maior, mais um pouco de preenchimento, porque três bytes se transformam em quatro caracteres. Essa sobrecarga é a razão pela qual o base64 é usado para pequenos ativos inline e evitado para ativos grandes.

Por que uma decodificação Base64 retorna caracteres estranhos?

Geralmente, uma incompatibilidade de codificação: o texto original não foi convertido em bytes UTF-8 antes da codificação ou você está decodificando dados base64url com um decodificador padrão. Verifique os caracteres `-` e `_` e confirme o codificador de origem usado UTF-8.

Ferramentas mencionadas nesta postagem

Navegue pela lista completa de 19 ferramentas

Mais artigos para ler

Todas as 19 postagens →