🔄

O que é codificação Base64 e quando usá-la?

Uma explicação prática sobre Base64 - o que realmente faz, por que existe e as situações reais em que você vai precisar.

· 6min de leitura

Base64 é uma daquelas ferramentas que soam crípticas até você conhecê-las — e então de repente você as vê em todo lugar. Está nas URLs de imagens embutidas em sites, nos tokens que autenticam suas chamadas de API, nos anexos de todos os e-mails que já existiram e nos QR codes que você escaneia em restaurantes.

Mas Base64 é frequentemente mal compreendido. As pessoas acham que é criptografia (não é). Acham que torna os dados menores (torna maiores). Acham que é um formato de compressão (é o oposto). Então o que é de verdade?

A definição em uma linha

Base64 é uma forma de representar dados binários como uma string de caracteres de texto imprimíveis e seguros.

Só isso. Não comprime, criptografa, ofusca nem protege nada. Apenas converte de um formato frágil (bytes binários) para um formato robusto (texto ASCII).

O problema que Base64 resolve

Computadores armazenam tudo como binário — sequências de bits, agrupadas em bytes. Um byte pode ser qualquer valor de 0 a 255. A maioria desses valores não corresponde a caracteres imprimíveis; muitos deles significam algo especial para vários sistemas:

  • Byte 0 é um caractere “null” que termina strings em C
  • Byte 10 é uma quebra de linha
  • Byte 13 é um retorno de carro
  • Bytes 128-255 não são ASCII de jeito nenhum — são interpretados de forma diferente por diferentes codificações

Se você tentar enviar dados binários brutos por um sistema que espera texto — o corpo de um e-mail, uma string JSON, uma URL, um atributo XML ou uma linha de SQL — algo vai ser distorcido. Um valor de byte 13 é interpretado como quebra de linha, um byte 0 trunca sua string, um byte acima de 127 é convertido para um caractere inesperado.

Base64 resolve isso usando apenas 64 caracteres “seguros”: A-Z maiúsculo, a-z minúsculo, dígitos 0-9 e os símbolos + e / (mais = para preenchimento no final). Toda combinação possível de bytes pode ser codificada usando apenas esses caracteres. A saída é garantida para passar por qualquer sistema baseado em texto intacta.

Como funciona (brevemente)

Base64 pega dados binários 3 bytes por vez e converte cada bloco de 3 bytes em 4 caracteres Base64. Cada caractere representa 6 bits de dados (já que 2⁶ = 64).

3 bytes (24 bits) → 4 caracteres base64 (24 bits)

A conversão é um lookup simples: divida os 24 bits de entrada em quatro grupos de 6 bits, mapeie cada grupo para um caractere Base64 usando o alfabeto.

Se a entrada não for divisível por 3, o último bloco é preenchido com = para que a saída seja sempre múltiplo de 4.

É por isso que Base64 aumenta os dados em exatamente 33%. Cada 3 bytes de entrada viram 4 bytes de saída. Um arquivo de 1000 bytes vira ~1334 bytes em Base64.

Onde você vai encontrar Base64 na prática

Anexos de e-mail

O e-mail foi originalmente projetado para carregar apenas texto ASCII de 7 bits. Quando você anexa uma foto a um e-mail, o sistema de e-mail codifica essa foto em Base64 para que possa sobreviver à jornada por servidores legados. Isso é tratado automaticamente pelo cliente de e-mail — você nunca vê a codificação — mas por baixo dos panos, cada imagem, PDF e ZIP que você já enviou por e-mail foi codificado em Base64.

Data URIs em HTML/CSS

Um data URI incorpora um arquivo diretamente num documento HTML ou CSS como uma string Base64:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAA..." />
.icon {
  background: url('data:image/svg+xml;base64,PHN2Zy...');
}

O navegador decodifica o Base64 e renderiza a imagem como se tivesse sido carregada de um arquivo. Economiza uma ida e volta HTTP para ativos pequenos — útil para ícones minúsculos, pixels de rastreamento 1×1 e dados de fonte inline.

JSON com payloads binários

JSON é apenas texto — você não pode colocar bytes binários brutos em uma string JSON. Então quando uma API precisa incluir dados binários (uma imagem, um certificado, uma assinatura), ela codifica em Base64 primeiro:

{
  "filename": "avatar.png",
  "content": "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAAC..."
}

O consumidor da API decodifica o Base64 de volta para bytes. Isso é comum em APIs REST para uploads de arquivo, webhooks que transmitem arquivos e serviços que lidam com imagens, certificados ou chaves criptográficas.

Tokens de autenticação

JWTs (JSON Web Tokens), tokens bearer OAuth e várias chaves de API são codificados em Base64. Você os reconhece pela combinação de letras, números e caracteres + / / / =.

Exemplo de JWT:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.SflKxwRJS...

Cada segmento entre os pontos é codificado separadamente em Base64. O primeiro segmento decodifica para {"alg":"HS256","typ":"JWT"}.

URLs

Uma variante chamada “Base64 URL-safe” substitui os caracteres + e / (que têm significados especiais em URLs) por - e _. Isso permite que dados Base64 sejam embutidos em URLs sem codificação extra — usado extensivamente para URLs curtas, tokens de compartilhamento e IDs compactos.

Transferência de arquivo binário por protocolos de texto

Toda vez que você está transferindo um arquivo binário por um meio só de texto — FTP em modo ASCII, protocolos antigos, colar um arquivo em um chat — Base64 é a forma padrão. Decodifique do outro lado e você recebe o arquivo original de volta.

O que Base64 NÃO é

Essa é a parte mais mal compreendida, então vale deixar bem claro.

Não é criptografia. Base64 é reversível por qualquer um, instantaneamente, sem chave. É um esquema de codificação público — o algoritmo é público e determinístico. Se você “criptografa” dados sensíveis codificando em Base64, qualquer um que intercepta a string pode decodificar em milissegundos.

Não é compressão. Base64 aumenta o tamanho dos dados em 33%. É o oposto de compressão. Se tamanho importa, você tipicamente comprimiria primeiro (gzip, brotli), e então codificaria o resultado em Base64.

Não é ofuscação em que se pode confiar. Uma senha codificada em Base64 é uma senha em texto puro com uma etapa extra trivial. Qualquer mecanismo de segurança que conta com Base64 como “camada de proteção” está quebrado por design.

Quando usar Base64

Use quando você precisa transmitir ou armazenar dados binários por um canal só de texto (JSON, e-mail, URL, XML), embutir pequenos arquivos diretamente em HTML ou CSS, trabalhar com um sistema que exige entrada específica codificada em Base64 (JWT, OAuth, certificados), ou compartilhar dados binários via copiar-e-colar.

Não use Base64 quando você quer proteger dados (use criptografia), quer economizar bytes (use compressão), tem um canal seguro para binário disponível (envie os bytes diretamente), ou está passando dados entre sistemas que poderiam simplesmente usar um sistema de arquivos compartilhado.

Codificação vs decodificação na prática

Para codificar: pegue um arquivo ou string, passe por um codificador Base64, receba texto seguro para embutir em qualquer lugar.

Para decodificar: pegue uma string Base64, passe por um decodificador, receba os bytes originais de volta.

Nossa ferramenta Base64 lida com ambos. Você pode codificar texto digitado na caixa ou codificar um arquivo que você solta. Pode decodificar uma string de volta para texto ou baixar o binário original. Tudo acontece no seu navegador — os dados nunca saem do seu dispositivo, o que importa quando você está trabalhando com tokens, chaves ou documentos sensíveis.

Um cheatsheet rápido

NecessidadeSolução
Embutir uma imagem em HTML sem requisição separadaData URI codificado em Base64
Enviar um arquivo binário em uma API JSONCodificar o arquivo em Base64, colocar a string num campo JSON
Decodificar um JWT para ver suas claimsDecodificar Base64 em cada segmento
Compartilhar um pequeno arquivo binário por chatCodificar em Base64, colar, o destinatário decodifica
Esconder dados dos usuáriosCriptografia, não Base64
Tornar arquivos menoresCompressão, não Base64

Base64 é um tradutor, não um cofre. Converte dados binários em texto para que possam viajar por sistemas só de texto — nada mais. Uma vez que você entende isso, vai vê-lo em todo lugar, e vai saber exatamente quando usá-lo. O fluxo completo de codificar-e-decodificar leva cerca de 10 segundos por arquivo na nossa ferramenta Base64, e como tudo roda localmente, você pode codificar material sensível com confiança sem se preocupar com onde a string vai parar.