Codificar e Decodificar Base64

Cole o texto e converta nos dois sentidos. Acentos e emoji são preservados corretamente.

Base64 não é criptografia

Este é o mal-entendido mais caro sobre Base64. Ele é uma codificação, não uma cifra: não existe chave, não existe segredo, e qualquer pessoa decodifica em um segundo. Base64 protege exatamente nada.

A finalidade é outra: transportar dados binários por canais que só aceitam texto. Anexo de e-mail, imagem embutida em CSS, token dentro de um JSON, certificado em arquivo PEM — todos usam Base64 porque o canal do meio não tolera bytes arbitrários.

Se você viu uma senha "protegida" em Base64 num sistema, isso é uma vulnerabilidade e não uma proteção.

Por que o resultado fica 33% maior

Base64 representa cada 3 bytes de entrada com 4 caracteres de saída, usando um alfabeto de 64 símbolos — 26 letras maiúsculas, 26 minúsculas, 10 dígitos, mais + e /. Cada caractere carrega 6 bits, e três bytes somam 24 bits, que cabem exatamente em quatro caracteres de 6.

Daí a razão 4:3, ou seja, um crescimento de aproximadamente 33%. É um custo previsível e é o preço de atravessar um canal de texto. Quando o número de bytes não é múltiplo de 3, o preenchimento com = completa o último grupo — um ou dois sinais de igual no fim.

A variante URL-safe

Os caracteres + e / têm significado próprio dentro de uma URL: o primeiro pode virar espaço e o segundo separa caminhos. Colar um Base64 comum numa query string quebra de formas difíceis de depurar.

A variante URL-safe, definida na RFC 4648, troca + por - e / por _, e frequentemente omite o preenchimento. É o que se usa em JWT, em identificador de recurso e em qualquer coisa que trafegue na própria URL. Nossa decodificação aceita as duas variantes automaticamente, com ou sem preenchimento.

Acentos e a armadilha do encoding

Base64 codifica bytes, não letras. Para codificar texto, é preciso primeiro transformar o texto em bytes — e é aí que o encoding importa. "ção" em UTF-8 são 5 bytes; em Latin-1 seriam 3, e o Base64 resultante seria completamente diferente.

Usamos UTF-8, que é o padrão da web. Se você decodificar aqui um Base64 gerado com outro encoding, o resultado sai com caracteres estranhos — o problema não é o Base64, é a interpretação dos bytes do outro lado.

Quando o conteúdo decodificado não é texto válido em UTF-8, mostramos o resultado em hexadecimal e avisamos: quase sempre significa que aquilo era um arquivo binário, não uma frase.

Onde você encontra Base64 no dia a dia

JWT — as três partes de um token são Base64 URL-safe. Decodificar as duas primeiras mostra cabeçalho e payload em texto claro, o que reforça que ali não há segredo: o que protege o token é a assinatura, não a codificação.

Data URLs — imagens embutidas em HTML ou CSS como data:image/png;base64,..., para evitar uma requisição extra.

Basic Auth — o cabeçalho HTTP carrega usuario:senha em Base64. É reversível por qualquer um, motivo pelo qual só se usa Basic Auth sobre HTTPS.

Certificados PEM — o conteúdo entre BEGIN e END é Base64 do certificado binário.

Continue por aqui

Ferramentas relacionadas