Todos os artigos
74 artigos · atualizado semanalmente Veja nossas Ferramentas
Todos os artigos
Comparativos

Base64 vs Hex: quando cada codificação faz sentido

Mesmos bytes, dois encodings. Comparativo de tamanho, legibilidade e onde cada um brilha — com exemplos reais.

COVER · Comparativos

Num projeto de geração de tokens, tive que decidir entre Base64 e Hex para armazenar 32 bytes aleatórios. Parece trivial até você lembrar que essa decisão afeta tamanho de coluna, comparações em banco, e como o dado aparece em logs. Este post é o que eu precisava antes de tomar essa decisão.

Os dois encodings representam os mesmos bytes — a diferença é o alfabeto usado e o espaço que ocupam.

O que cada um faz

Hex usa 16 caracteres (0-9, a-f). Cada byte vira dois chars. 32 bytes → 64 chars.

Base64 usa 64 caracteres (letras, números, +, /). Cada 3 bytes viram 4 chars, com padding = quando necessário. 32 bytes → 44 chars (incluindo até 2 chars de padding).

32 bytes aleatórios:
Hex:    a3f2bc...  (64 chars)
Base64: o/K8...    (44 chars, ~33% menor)

Quando usar cada um

Use Hex quando:

  • O valor vai aparecer em logs ou URLs diretamente (mais legível)
  • Você precisa comparar prefixos (tokens de sessão que começam com determinado padrão)
  • A linguagem/banco que você usa manipula hex nativamente (decode('...', 'hex') no PostgreSQL, por exemplo)
  • Você está debugando e quer conseguir ler o valor sem tool adicional

Use Base64 quando:

  • Tamanho importa (APIs, cookies, headers HTTP têm limites)
  • Você está encodando dados binários arbitrários (imagens, arquivos) em JSON ou HTML
  • O sistema receptor já espera Base64 (JWTs, por exemplo, usam Base64URL)

Base64URL: a variante que você vai encontrar em JWT

Base64 padrão usa + e /, que têm significado especial em URLs. Base64URL substitui + por - e / por _, e remove o padding =. Isso torna o valor seguro para URLs e headers HTTP sem encoding adicional.

// Base64 padrão
btoa(String.fromCharCode(...bytes))  // pode conter +, /, =

// Base64URL (o que JWT usa)
btoa(String.fromCharCode(...bytes))
  .replace(/\+/g, '-')
  .replace(/\//g, '_')
  .replace(/=/g, '')

O Encoder Base64 do Quick Tools suporta ambas as variantes.

Na prática: tokens de sessão

Para tokens de sessão de 32 bytes:

Formato Tamanho Caracteres seguros pra URL Legível em log
Hex 64 chars Sim Sim
Base64 44 chars Não (tem +, /, =) Razoável
Base64URL 43 chars Sim Razoável

Para armazenar em cookie ou header de autorização: Base64URL. Para logar em texto plano e debugar: Hex. Para guardar em banco de dados como texto: os dois funcionam, mas Hex é mais fácil de filtrar e indexar em SQL.

A decisão não é irreversível, mas é chata de mudar

Uma vez que você escolhe um encoding para um token em produção, mudar significa migrar todos os tokens existentes. Valide a escolha com base em onde o valor vai ser usado mais frequentemente, não apenas onde ele é gerado.

Checklist prático para escolher Base64 ou hexadecimal

Use hexadecimal quando o valor precisa ser inspecionado por humanos, comparado em logs ou copiado entre sistemas de desenvolvimento. Hashes SHA, checksums, IDs binários curtos e dumps de bytes ficam mais previsíveis em hex porque cada byte vira exatamente dois caracteres. Isso facilita revisar diferenças, contar tamanho e encontrar prefixos.

Use Base64 quando o objetivo é transportar bytes com menos overhead. Imagens pequenas embutidas em JSON, payloads de API, anexos e tokens geralmente ficam mais compactos em Base64 do que em hexadecimal. O trade-off é legibilidade: Base64 é melhor para máquinas, hex é melhor para humanos.

Uma regra simples: se alguém vai debugar olhando para a string, prefira hex. Se a string só precisa atravessar um canal textual com menor tamanho, prefira Base64. Antes de padronizar, teste ida e volta com dados reais no Base64 Encoder e valide também o decode para evitar problemas com charset, padding ou quebras de linha.

Perguntas frequentes

Base64 é criptografia?

Não. Base64 é apenas codificação. Qualquer pessoa pode decodificar o conteúdo sem chave. Não use Base64 para esconder segredos, senhas ou tokens sensíveis.

Hexadecimal aumenta mais o tamanho?

Sim. Hexadecimal dobra o tamanho dos bytes originais. Base64 costuma adicionar cerca de 33%, por isso é mais comum para transporte de arquivos e payloads maiores.

Armadilha comum

O erro mais comum é escolher o formato pela aparência, não pelo uso. Base64 parece mais compacto, mas é ruim para inspeção manual. Hex parece maior, mas é excelente para comparar bytes e hashes. Em documentação técnica, mostre sempre um exemplo de entrada e saída para que outras pessoas saibam exatamente qual codificação esperar.

HT
Autor
Hugo Tanaka
Japonês-brasileiro de segunda geração, cresceu vendo o pai debugar planilhas de logística em BASIC. Desenvolvedor full-stack com foco em tooling e DX — o papel que finalmente uniu código, escrita e obsessão por produtividade num lugar só. Escreve para quem já sabe programar e quer resolver um problema agora.
Ver perfil