[GUIA] 8 min de leitura

[GUIA] Referência Completa Base64

Tudo que você precisa saber sobre codificação Base64: teoria, implementação e melhores práticas.

Janeiro 2025 | fundamentals

// O QUE É BASE64?

Base64 é um esquema de codificação binário-para-texto que representa dados binários usando 64 caracteres ASCII. É projetado para codificar dados binários que precisam ser armazenados e transferidos através de mídias projetadas para dados textuais.

O conjunto de caracteres Base64 inclui A-Z, a-z, 0-9, e dois caracteres adicionais (tipicamente + e /), mais = para preenchimento.

// COMO BASE64 FUNCIONA

A codificação Base64 funciona pegando dados binários e convertendo-os em uma string de caracteres ASCII. O processo envolve:

1. Dividir a entrada em pedaços de 6 bits (Base64 usa 6 bits por caractere) 2. Mapear cada valor de 6 bits para um caractere no alfabeto Base64 3. Adicionar preenchimento com caracteres '=' se necessário

// Exemplo: Codificando 'Man' para Base64
// 'M' = 01001101, 'a' = 01100001, 'n' = 01101110
// Combinado: 010011010110000101101110
// Dividido em grupos de 6 bits: 010011 010110 000101 101110
// Valores decimais: 19, 22, 5, 46
// Caracteres Base64: T, W, F, u
// Resultado: 'TWFu'

// CASOS DE USO COMUNS

  • > Incorporar imagens em HTML/CSS (URIs de dados)
  • > Codificar dados binários para APIs JSON
  • > Anexos de email (codificação MIME)
  • > Armazenar dados binários em bancos de dados
  • > Tokens de autenticação e chaves API
  • > Transmissão de dados segura para URLs

// IMPLEMENTAÇÃO EM JAVASCRIPT

Navegadores modernos fornecem funções integradas de codificação e decodificação Base64:

Para codificar texto para Base64, use btoa() (binary to ASCII). Para decodificar Base64 para texto, use atob() (ASCII to binary).

// Codificar texto para Base64
const text = 'Olá, Mundo!';
const encoded = btoa(text);
console.log(encoded); // T2zDoSwgTXVuZG8h

// Decodificar Base64 para texto
const decoded = atob(encoded);
console.log(decoded); // Olá, Mundo!

// Para strings Unicode, use TextEncoder/TextDecoder
const encoder = new TextEncoder();
const decoder = new TextDecoder();

const unicodeText = 'Olá, 世界!';
const bytes = encoder.encode(unicodeText);
const base64 = btoa(String.fromCharCode(...bytes));
console.log(base64);

// CONSIDERAÇÕES DE SEGURANÇA

Base64 NÃO é criptografia ou segurança. É simplesmente codificação para representação de dados. Notas importantes de segurança:

Nunca use Base64 sozinho para proteção de dados sensíveis. Sempre valide entrada Base64 para prevenir ataques de injeção. Esteja ciente de que Base64 aumenta o tamanho dos dados em ~33%.

  • > Base64 é facilmente reversível - não fornece segurança
  • > Sempre valide e sanitize entrada Base64
  • > Use criptografia adequada para dados sensíveis
  • > Considere variantes Base64 seguras para URL em aplicações web
  • > Cuidado com ataques de oracle de preenchimento em alguns contextos

// MELHORES PRÁTICAS

  • > Use Base64 seguro para URL em aplicações web (substitua + por -, / por _)
  • > Sempre manipule preenchimento corretamente
  • > Valide comprimento e caracteres de entrada
  • > Considere compressão antes da codificação para dados grandes
  • > Use streaming para conjuntos de dados muito grandes
  • > Implemente tratamento de erro adequado para entrada inválida