Codificação · 1 de setembro de 2026

Codificação Base64 — o que é, quando usar e quando não usar

Base64 converte dados binários em texto ASCII seguro. Está em todo lugar — e-mails, JWTs, data URIs, incorporações — mas não é criptografia. Aqui está como funciona e onde desenvolvedores realmente precisam.

Base64 é um daqueles formatos que todo desenvolvedor já usou, mas poucos conseguem explicar sem pausar. Parece caracteres aleatórios. Faz os dados maiores. E ainda assim é a espinha dorsal de anexos de e-mail, payloads JWT, imagens inline em CSS e dezenas de outros protocolos que precisam mover dados binários por canais de apenas texto.

A versão curta: Base64 codifica dados binários arbitrários como caracteres ASCII imprimíveis. A versão longa envolve um alfabeto de 64 caracteres, regras de preenchimento e algumas variantes que confundem as pessoas em produção.

Por que Base64 existe

Muitos sistemas foram projetados para transportar apenas texto — e-mail (SMTP), URLs, XML, JSON. Se você deseja enviar um arquivo binário por um desses canais, precisa de uma maneira de representar bytes como caracteres. Base64 resolve isso mapeando cada 3 bytes de entrada para 4 caracteres de saída, usando apenas caracteres que são seguros em praticamente qualquer protocolo de texto.

O trade-off: Base64 aumenta o tamanho dos dados em aproximadamente 33%. Uma imagem de 1KB se torna cerca de 1,3KB de texto. Para a maioria dos casos de uso, isso é aceitável. Para sistemas de alto throughput, isso importa, e você verá alternativas como Base85 ou protocolos binários brutos.

Os 64 caracteres

O alfabeto é:

A-Z  (26 caracteres)
a-z  (26 caracteres)
0-9  (10 caracteres)
+ /  (2 caracteres)

Isso são 64 caracteres no total, daí o nome. O caractere = é usado para preenchimento quando o comprimento da entrada não é um múltiplo de 3 bytes.

Cada caractere no alfabeto é ASCII imprimível, o que significa que a saída de Base64 pode viajar por e-mails, aparecer em strings JSON, ficar dentro de atributos HTML e sobreviver sistemas que podem danificar dados binários brutos.

Como a codificação funciona

Pegue três bytes de entrada. Cada byte tem 8 bits, então você tem 24 bits no total. Base64 divide esses 24 bits em quatro grupos de 6 bits. Cada grupo de 6 bits é mapeado para um caractere no alfabeto:

  • 000000 → A
  • 000001 → B
  • …
  • 111111 → z

É isso. A codificação é uma transformação simples no nível de bits sem chave, sal ou segredo. Qualquer pessoa pode decodificar Base64 invertendo a tabela de referência.

Preenchimento

Se o comprimento da entrada não é um múltiplo de 3, o preenchimento preenche a lacuna:

  • 1 byte restante → 2 caracteres Base64 + ==
  • 2 bytes restantes → 3 caracteres Base64 + =
  • 0 bytes restantes → sem preenchimento

Os caracteres de preenchimento não carregam dados. Eles existem para que o comprimento da saída seja sempre um múltiplo de 4, que muitos parsers esperam.

Variantes

Nem todo Base64 é idêntico:

  • Base64 padrão (A-Za-z+/=) — o padrão, usado em e-mails MIME e a maioria dos protocolos.
  • Base64 seguro para URLs (A-Za-z-_) — substitui + por - e / por _, remove o preenchimento. Usado em JWTs, parâmetros de URL e nomes de arquivo.
  • Base64 sem preenchimento — alguns sistemas omitem os caracteres =. A saída é mais curta, mas alguns parsers falham.

Quando você está debugando um JWT ou data URI e a decodificação falha, a primeira coisa a verificar é se o codificador usou Base64 seguro para URLs ou Base64 padrão. Um - no meio do que você esperava ser uma string Base64 padrão é a pista.

Onde desenvolvedores realmente encontram Base64

Anexos de e-mail. MIME (RFC 2045) usa Base64 para codificar anexos binários. Se você já viu um arquivo .eml com strings longas de caracteres aleatórios, isso é conteúdo codificado em Base64.

Payloads JWT. As três partes de um JWT (cabeçalho, payload, assinatura) são cada uma codificadas em Base64 seguro para URLs. Quando você decodifica um JWT, você está invertendo a codificação Base64url em cada segmento.

Data URIs. data:image/png;base64,iVBOR... permite incorporar uma imagem diretamente em HTML ou CSS. Os bytes da imagem são codificados em Base64 para que possam aparecer em um atributo de texto.

APIs. Algumas APIs aceitam ou retornam dados binários codificados em Base64 (uploads de arquivos, processamento de imagens, assinaturas criptográficas). É menos comum agora que a maioria das APIs suporta dados de formulário multipart, mas ainda aparece.

Incorporações. Modelos de aprendizado de máquina às vezes armazenam incorporações como strings Base64 em JSON. Não é ideal para desempenho, mas é conveniente para transporte.

Quando NÃO usar Base64

Não use para criptografia. Base64 é uma codificação, não criptografia. Qualquer pessoa pode decodificar. Se você está colocando dados sensíveis em Base64, está apenas obscurecendo, não protegendo.

Não use para compactação. Base64 torna os dados maiores, não menores. Se você está codificando em Base64 dados que já estão compactados (como um arquivo .gz), está adicionando sobrecarga sem benefício.

Não use em caminhos críticos de desempenho. A codificação/decodificação adiciona tempo de CPU e aumenta o tamanho do payload. Para APIs internas de alta frequência, use protocolos binários (protobuf, msgpack) em vez disso.

Não esqueça a variante. Se você está gerando Base64 para uma URL ou JWT, use Base64 seguro para URLs. Se está gerando para e-mail ou transporte geral, use Base64 padrão. Misturá-los causa corrupção silenciosa de dados.

Referência rápida | Cenário | Variante | Preenchimento | |–––––|–––––|—————| | JWT | Seguro para URLs | Não | | E-mail / MIME | Padrão | Sim | | Data URI | Padrão | Opcional | | Parâmetro de URL | Seguro para URLs | Não | | Transporte geral | Padrão | Sim |

Experimente

Se você tem uma string Base64 que precisa decodificar ou dados binários que precisa codificar, use uma ferramenta baseada em navegador para que a conversão aconteça localmente — seus dados não são enviados para um servidor para algo tão simples.