Codificar e decodificar Base64

RSS

Codifique texto em Base64 ou decodifique Base64 de volta para texto, com suporte completo a UTF-8 e opção segura para URL.

Funciona 100% no seu navegador. Nada do que você cola é enviado ou armazenado.
Texto ou Base64
Resultado
Pronto.

Como usar o codificador e decodificador Base64

  1. Escolha Codificar para transformar texto em Base64, ou Decodificar para transformar Base64 de volta em texto.
  2. Cole a sua entrada. O texto é tratado como UTF-8, então letras acentuadas, alfabetos não latinos e emojis funcionam corretamente.
  3. Ative a opção Seguro para URL se o resultado for para uma URL, um nome de arquivo ou um JWT.
  4. Copie a saída.

A codificação e a decodificação acontecem localmente no seu navegador; nada do que você cola é enviado ou armazenado.

Como o Base64 funciona

O Base64, definido na RFC 4648, representa dados binários quaisquer usando 64 caracteres ASCII imprimíveis: A–Z, a–z, 0–9, + e /. Ele existe para que conteúdo binário possa trafegar com segurança por sistemas feitos para texto, como e-mail, JSON, XML e cabeçalhos HTTP.

O algoritmo processa a entrada em blocos de 3 bytes (24 bits) e os divide em quatro grupos de 6 bits. Cada valor de 6 bits (0–63) seleciona um caractere do alfabeto. A palavra Man mostra o processo:

EtapaValor
BytesM=77, a=97, n=110
24 bits01001101 01100001 01101110
Grupos de 6 bits010011 010110 000101 101110 = 19, 22, 5, 46
Base64TWFu

Como cada 3 bytes viram 4 caracteres, a saída em Base64 fica cerca de 33% maior que a entrada (mais as quebras de linha, se um formato como o MIME as inserir).

Preenchimento com =

Quando o tamanho da entrada não é múltiplo de três, o último grupo recebe preenchimento (padding). Um byte restante gera dois caracteres mais ==; dois bytes restantes geram três caracteres mais =. Por exemplo, Hi é codificado como SGk=.

Base64 seguro para URL

Os caracteres padrão + e / têm significado especial em URLs e caminhos de arquivo. A RFC 4648 §5 define o alfabeto base64url, que os substitui por - e _. O preenchimento costuma ser omitido. Os JSON Web Tokens usam base64url sem preenchimento.

Standard:  +/8=
URL-safe:  -_8

Erros comuns

Base64 não é criptografia

Qualquer pessoa decodifica Base64 na hora; não existe chave. Nunca o use para "esconder" senhas ou chaves de API. Para verificar integridade, use um hash do gerador de hash e, para confidencialidade, use criptografia de verdade.

UTF-8 em JavaScript

A função btoa() nativa do navegador só aceita caracteres da faixa Latin-1 e gera um erro para qualquer outro. Converta o texto em bytes UTF-8 primeiro:

btoa("✓");   // InvalidCharacterError

const bytes = new TextEncoder().encode("✓");
btoa(String.fromCharCode(...bytes));   // "4pyT"

Misturar alfabetos

Decodificar dados base64url com um decodificador padrão estrito falha nos caracteres - e _, ou na falta de preenchimento. Converta o alfabeto e recoloque o preenchimento até um múltiplo de quatro caracteres antes de decodificar.

Onde você vai encontrar Base64

  • Data URIs incorporam arquivos pequenos diretamente no HTML ou no CSS: data:image/png;base64,iVBORw0KGgo...
  • A autenticação HTTP Basic envia username:password codificado em Base64. user:pass vira Authorization: Basic dXNlcjpwYXNz, o que é trivialmente reversível, então a autenticação Basic só deve ser usada via HTTPS. Você pode inspecionar esses cabeçalhos com o verificador de cabeçalhos HTTP.
  • Anexos de e-mail (MIME) e certificados e chaves PEM.
  • JWTs, cujo cabeçalho e payload são JSON codificado em base64url. Use o decodificador de JWT para lê-los.
Dica: Na linha de comando, printf 'text' | base64 codifica e base64 -d decodifica (versões mais antigas do macOS usam -D). Use printf ou echo -n para que uma quebra de linha no final não seja codificada junto.

Perguntas frequentes

Por que a minha string Base64 termina com = ou ==?

Isso é o preenchimento. Ele informa ao decodificador quantos bytes o último grupo tinha quando o tamanho da entrada não era divisível por três.

Base64 é seguro?

Não. É uma codificação, não criptografia. Não oferece nenhuma confidencialidade; apenas torna os dados binários seguros para serem transportados como texto.

Por que a saída codificada é maior que a entrada?

Cada caractere Base64 carrega 6 bits em vez de 8, então 3 bytes de entrada precisam de 4 caracteres de saída, um acréscimo de aproximadamente um terço.

Qual é a diferença entre Base64 e base64url?

Só dois caracteres mudam: o base64url usa - e _ em vez de + e / e normalmente dispensa o preenchimento =, de modo que o resultado pode ser colocado em URLs sem precisar de escape adicional.

Atualizado

Copiado para a área de transferência