A codificação Base64 converte dados binários em um alfabeto de texto de 64 caracteres (A-Z, a-z, 0-9, mais dois símbolos) para que possam trafegar com segurança por sistemas projetados para texto, como URLs, JSON, e-mail e CSS. Para decodificar, você inverte o processo de volta aos bytes originais. É uma codificação, não criptografia: qualquer um pode decodificá-la, então não oferece segurança alguma.
A razão pela qual a base64 existe é simples. Muitos canais foram projetados para transportar texto e falham com binário bruto. Uma string JSON não pode conter bytes arbitrários, um corpo de e-mail historicamente precisava ser ASCII de 7 bits, e uma URL tem caracteres reservados com significado especial. A base64 transforma qualquer bloco binário em caracteres seguros e imprimíveis, ao custo de torná-lo cerca de 33% maior, pois empacota 3 bytes em 4 caracteres.
Como a Codificação Base64 Funciona#
O mecanismo vale a pena entender uma vez. O Base64 pega seus bytes 3 de cada vez. Três bytes são 24 bits, que se dividem uniformemente em quatro grupos de 6 bits. Cada grupo de 6 bits (um valor de 0 a 63) mapeia para um caractere no alfabeto base64. Então, cada 3 bytes de entrada se tornam exatamente 4 caracteres de saída.
Quando a entrada não é um múltiplo exato de 3 bytes, o codificador adiciona preenchimento no final. Um byte restante produz dois caracteres mais ==; dois bytes restantes produzem três caracteres mais =. Esse = final é preenchimento, não dados, e é por isso que as strings base64 frequentemente terminam com um ou dois sinais de igual.
Bytes de entrada: M a n
ASCII: 77 97 110
Binário: 01001101 01100001 01101110
Grupos de 6 bits: 010011 010110 000101 101110
Base64: T W F u
Então Man codifica para TWFu. Decodifique TWFu e você obtém Man de volta, byte por byte. Nada é perdido, porque o base64 é totalmente reversível.
As Três Variantes Que Confundem as Pessoas#
Aqui está a lacuna que a maioria dos tutoriais deixa em aberto: "base64" não é um formato fixo. Existem três variantes comuns, e usar a errada é uma fonte frequente de bugs do tipo "decodificou e virou lixo".
| Variante | Caracteres 62 e 63 | Preenchimento | Onde usar |
|---|---|---|---|
| Padrão (RFC 4648) | + e / | preenchimento = | JSON, dados gerais, maioria das APIs |
| Segura para URL (RFC 4648 §5) | - e _ | geralmente sem preenchimento | URLs, nomes de arquivo, segmentos JWT |
| MIME (RFC 2045) | + e / | preenchimento = | E-mail; quebra linhas a cada 76 caracteres |
As diferenças importam na prática:
- Padrão é o padrão. Usa
+e/, que funcionam bem dentro de JSON e na maioria dos corpos de requisição. - Segura para URL troca
+por-e/por_, porque+e/têm significados reservados em uma URL (um+pode virar espaço, uma/é separador de caminho). Esta é a variante que JWTs usam para seus segmentos de cabeçalho e payload. O preenchimento geralmente também é removido. - MIME é o base64 padrão, mas insere uma quebra de linha a cada 76 caracteres para que sistemas de e-mail antigos não tenham problemas com linhas longas. Alimentar essas quebras de linha embutidas em um decodificador rigoroso que não as espera pode causar falhas.
Dica: se uma string base64 decodificar para algo sem sentido, verifique primeiro o alfabeto. Um
-ou_nos dados significa que é segura para URL e você está decodificando como padrão, ou vice-versa. Variantes incompatíveis são o bug número um do base64.
Inline de Imagens como Data URLs#
O uso mais prático do base64 na web é a data URL: incorporar um arquivo pequeno diretamente no HTML ou CSS em vez de vinculá-lo. Uma data URL tem uma forma fixa:
data:[<mime-type>][;base64],<encoded-data>
Para um ícone PNG minúsculo, a imagem codificada se torna uma string que você pode colocar diretamente em um background-image do CSS:
.icon {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA...");
width: 16px;
height: 16px;
}
O navegador decodifica o base64, reconstrói o PNG e o renderiza sem uma requisição de rede separada. O mesmo funciona inline no HTML:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA..." alt="ícone" />
Quando o inline ajuda e quando atrapalha#
Este é o julgamento que os explicadores ignoram. Inline não é gratuito, porque o base64 infla o arquivo em aproximadamente 33% e os bytes inline não podem ser armazenados em cache separadamente da página ou folha de estilo.
Use inline com data URL quando:
- O ativo é minúsculo (um ícone pequeno, um espaçador 1x1, um SVG com alguns quilobytes).
- Você quer eliminar uma requisição HTTP extra para uma imagem crítica acima da dobra.
- O ativo é usado uma vez e raramente muda.
Vincule a um arquivo normal quando:
- A imagem é grande. O inchaço do base64 mais a falta de cache separado tornam a página mais pesada e lenta.
- O ativo é reutilizado em várias páginas, onde um arquivo externo em cache ganha facilmente.
- A imagem muda com frequência, pois uma cópia inline invalida o cache de toda a página ou folha de estilo a cada alteração.
A regra prática: faça inline de ativos pequenos, únicos e críticos; vincule todo o resto.
Base64 Não é Criptografia#
Isso pega iniciantes de surpresa constantemente, então vale a pena afirmar claramente. Base64 é reversível por qualquer pessoa sem chave ou segredo. Ela não oculta nada. Se você codificar uma senha ou chave de API em base64, você não a protegeu; apenas a tornou um pouco menos óbvia para um humano que está lendo o texto. A carga útil de um JWT é codificada em base64url, e é exatamente por isso que qualquer um pode decodificá-la e ler suas declarações sem o segredo de assinatura.
Quando você realmente precisa de confidencialidade, use criptografia real. Base64 é para transporte seguro de bytes através de canais de texto, não para ocultá-los. Para o ângulo específico do JWT, nosso guia sobre decodificar versus verificar um JWT com segurança explica por que ler um token é trivial, enquanto confiar nele requer verificação de assinatura.
Codifique e Decodifique com Segurança no Seu Navegador#
Assim como SQL e JWTs, os dados que você codifica em base64 geralmente são confidenciais: um arquivo de configuração, uma chave privada, uma imagem interna. Colá-los em uma ferramenta do lado do servidor envia esses bytes para fora da sua máquina. Um codec que roda inteiramente no navegador mantém tudo local.
Passo 1: Codifique texto ou um arquivo#
Abra o codificador e decodificador base64 gratuito, cole texto ou solte um arquivo e escolha sua variante (padrão ou segura para URL). Para uma imagem, a ferramenta lê o arquivo, codifica os bytes e monta uma URL data: pronta para colar com o tipo MIME correto, tudo na página, para que o arquivo nunca seja enviado.
Passo 2: Decodifique e visualize o resultado#
Cole uma string base64 para decodificá-la. Se for texto, você recebe o texto de volta. Se for uma imagem codificada, o codec exibe a imagem decodificada diretamente, para que você possa confirmar que é válida em vez de olhar para um blob. Quando a entrada não é texto imprimível, ele usa um dump hexadecimal para que você possa inspecionar os bytes brutos.
Passo 3: Copie a URL de dados para seu CSS ou HTML#
Pegue a string data:image/...;base64,... gerada e insira em um background-image ou em um <img src>. Reserve isso para ativos pequenos e críticos, conforme as regras de inlining acima, e vincule imagens maiores ou reutilizadas normalmente.
Referência Rápida#
- Base64 mapeia cada 3 bytes para 4 caracteres de texto, aumentando os dados em cerca de 33%.
- O
=no final é preenchimento, não dados. - O padrão usa
+e/; o seguro para URL usa-e_; o MIME quebra linhas a cada 76 caracteres. - Uma URL de dados é
data:<mime>;base64,<dados>e incorpora um ativo sem requisição extra. - Incorpore ativos pequenos e únicos; vincule ativos grandes ou reutilizados.
- Base64 é codificação, não criptografia; não oferece segurança.
Para imagens especificamente, o conversor de imagem para base64 dedicado monta a URL de dados com pré-visualização ao vivo, e o codificador base64 Molixa lida com texto, arquivos e o fallback de dump hexadecimal para entrada não textual, inteiramente no lado do cliente.
Perguntas Frequentes#
Para que serve a codificação base64? Base64 converte dados binários em texto simples para que possam trafegar por canais feitos para texto, como URLs, payloads JSON, corpos de e-mail e URLs de dados CSS. Permite incorporar uma imagem diretamente em uma folha de estilo, carregar um arquivo dentro de um campo JSON ou passar dados binários em um parâmetro de URL sem que sejam corrompidos por caracteres reservados.
A codificação base64 é segura ou criptografada? Nenhum dos dois. Base64 é totalmente reversível por qualquer pessoa, sem chave e sem segredo, portanto não oferece segurança alguma. Ela apenas remodela bytes em caracteres imprimíveis seguros para transporte. Codificar uma senha ou chave de API em base64 não a protege. Quando você precisar de confidencialidade real, use criptografia de verdade, não base64.
Como converter uma imagem em uma URL de dados base64?
Codifique os bytes da imagem em base64 e envolva-os como data:image/png;base64,<dados-codificados> (troque o tipo MIME para corresponder ao arquivo). Cole essa string em um background-image CSS ou em um <img src> HTML e o navegador decodifica e renderiza sem requisição extra. Um codec do lado do navegador monta a URL de dados completa para você e pré-visualiza o resultado.
Qual é a diferença entre base64 padrão e base64 segura para URL?
Base64 padrão usa + e / para seus dois últimos caracteres, o que é aceitável em JSON e na maioria das APIs. Base64 segura para URL substitui esses por - e _ porque + e / são reservados em URLs, e frequentemente remove o preenchimento =. Os segmentos de cabeçalho e payload de JWT usam a variante segura para URL. Decodificar com o alfabeto errado produz lixo.
Por que minha string base64 tem sinais de igual no final?
Isso é preenchimento. Base64 trabalha em grupos de 3 bytes de entrada produzindo 4 caracteres, então quando o comprimento da entrada não é múltiplo de 3, o codificador adiciona um ou dois caracteres = para preencher o grupo final. Um byte final produz ==, dois bytes finais produzem =. O preenchimento não carrega dados e alguns codificadores seguros para URL o omitem.
Devo incorporar imagens como base64 ou vincular a arquivos? Incorpore apenas ativos pequenos, únicos e críticos, como um ícone pequeno ou uma imagem acima da dobra onde economizar uma requisição HTTP importa. Base64 infla o tamanho em cerca de 33% e dados incorporados não podem ser armazenados em cache separadamente da página, então para imagens grandes ou reutilizadas com frequência, um arquivo vinculado normal que o navegador armazena em cache é mais rápido.



