ToolActToolAct

Codificador/Decodificador Base64

Codifique e decodifique Base64 rapidamente com suporte a texto UTF-8

Entrada
Caracteres: 0
Bytes: 0
Saída
Caracteres: 0
Bytes: 0

Selecione o Método de Conversão

O que é Base64?

Base64 é um método que utiliza 64 caracteres imprimíveis para representar dados binários. Esses 64 caracteres incluem letras maiúsculas A-Z, minúsculas a-z, dígitos 0-9, e os dois símbolos + e /. Como usa apenas caracteres imprimíveis, os dados codificados em Base64 podem ser transmitidos com segurança em ambientes que suportam apenas texto, como emails, páginas web e JSON. Os dados codificados aumentam aproximadamente 33% em relação aos dados originais. Base64 apareceu pela primeira vez em 1987 no protocolo PEM para transmitir dados binários com segurança em emails. Hoje é um dos padrões da Internet, amplamente utilizado em diversos cenários, de anexos de email a tokens JWT, de imagens embarcadas a transmissão de dados. Quase todas as linguagens de programação têm funções de codificação e decodificação Base64 integradas.

Como Usar

Como usar

  1. Cole seu texto na caixa de entrada à esquerda
  2. Selecione a operação 'Codificar' ou 'Decodificar'
  3. Os resultados aparecem automaticamente à direita
  4. Clique no botão 'Copiar' para salvar o resultado

Erros Comuns

  • Base64 é codificação, não criptografia; qualquer pessoa com o texto pode decodificá-lo, portanto não a utilize para proteger segredos.
  • Quando a decodificação falhar, verifique preenchimento ausente, quebras de linha copiadas, caracteres URL-safe Base64 ou aspas ao redor.

Casos de uso

Codificar texto Unicode para campos que só aceitam Base64Cole texto contendo nomes, emojis, quebras de linha ou caracteres CJK e a página codifica via TextEncoder antes do btoa, evitando a falha clássica de Unicode no navegador que corrompe entradas não ASCII. A string de entrada nunca sai da aba do navegador — a codificação é executada inteiramente contra o TextEncoder em memória e os caracteres resultantes permanecem no DOM local até que você os copie.
Decodificar trechos de payload copiados durante depuraçãoMude para o modo decodificar para valores encontrados em logs, campos JSON, cabeçalhos, arquivos de configuração ou chamados de suporte. Base64 inválido retorna um erro claro em vez de produzir um resultado parcial enganoso. A decodificação também acontece localmente: atob mais TextDecoder remontam os bytes em uma string diretamente na página, para que os bytes permaneçam na mesma máquina que os produziu.
Verificar uma conversão ida e volta antes de publicar exemplosUse o botão de trocar após codificar ou decodificar para confirmar que o exemplo retorna ao texto original. Isso é útil para documentações de API, exemplos de webhooks, trechos de README e fixtures de teste onde um caractere errado quebra o exemplo. Como tudo roda no cliente, o mesmo exemplo pode ser convertido repetidamente sem enviar o payload para um decodificador de terceiros.
Inspecionar um segmento de cabeçalho ou payload JWTDecodifique um segmento de um JWT entre os pontos para ler o cabeçalho ou claims JSON durante a depuração, deixando a verificação de assinatura para a biblioteca adequada. A página não valida assinaturas, então não a use como verificação de autenticação nem confie no conteúdo em caminhos de produção. Tokens decodificados aqui nunca saem do navegador, o que importa ao depurar tokens de produção que contêm claims internos.
Reconstruir um pequeno data: URI para recursos inlineCodifique um SVG pequeno, favicon ou trecho CSS em um data: URI e cole diretamente em uma folha de estilo, README ou template de email. Útil para pré-visualizações inline onde não é possível fazer upload do recurso, mas observe o aumento de 33% no tamanho antes de incorporar imagens maiores. Os bytes originais são lidos do campo de entrada e a saída codificada permanece local, então mesmo ícones não lançados podem ser testados em marcação sem enviá-los a qualquer lugar.

Princípio técnico

Base64 é uma das várias codificações binário-para-texto especificadas na RFC 4648 (S. Josefsson, outubro de 2006), juntamente com Base16 (hex) e Base32. O nome 'Base64' e o alfabeto foram originalmente definidos para Privacy-Enhanced Mail (RFC 989, 1987), onde o PEM encapsulava material binário S/MIME e X.509 dentro de um envelope ASCII imprimível para que pudesse sobreviver a transportes limpos de 7 bits. O mesmo alfabeto tornou-se depois o padrão de facto para MIME (RFC 2045), assinaturas JWT (RFC 7519), URIs data: em HTML (RFC 2397), blobs de chave pública SSH (RFC 4253 §6.6) e arquivos de ponteiro Git LFS (que armazenam hashes SHA-256 como Base64). Os próprios packfiles do Git NÃO são Base64 — usam codificação delta com compressão zlib, e os IDs de objetos Git são strings hex SHA-1 de 40 caracteres, não Base64. O custo: cada 3 bytes de entrada se tornam 4 caracteres de saída, então a saída codificada é exatamente 4/3 do tamanho (33,3% de sobrecarga). Para um blob binário de 10 MB, a forma codificada é ~13,3 MB. O mecanismo: divide-se a entrada em grupos de 3 bytes (24 bits); cada grupo é dividido em quatro valores de 6 bits; cada valor de 6 bits seleciona um caractere de um alfabeto de 64 caracteres. O alfabeto canônico é A-Z (índices 0-25), a-z (26-51), 0-9 (52-61), '+' (62), '/' (63), com '=' como caractere de preenchimento. O exemplo clássico da RFC 4648: 'Man' (0x4d 0x61 0x6e) é compactado no valor de 24 bits 0x4d616e; dividido em pedaços de 6 bits dá 0x0d 0x16 0x0e 0x0a, mapeado para 'TWFu'. Quando o comprimento da entrada não é múltiplo de 3, o grupo final é preenchido com zeros à direita: 1 byte restante → 2 pedaços significativos de 6 bits + '==' (2 caracteres de preenchimento); 2 bytes restantes → 3 pedaços significativos + '=' (1 preenchimento). Os caracteres de preenchimento não carregam informação, mas tornam o comprimento da codificação uma função determinística do comprimento da entrada e permitem que decodificadores rejeitem entrada truncada. No navegador, Base64 tem duas armadilhas notórias. Primeiro, `btoa` e `atob` (as variantes DOMString) operam em unidades de código Latin-1, não bytes — passar uma string contendo U+00E9 (é) ou U+4E2D (中) lança InvalidCharacterError. A página contorna isso passando por `TextEncoder().encode(str)` (sempre UTF-8) antes de chamar `btoa`, e `TextDecoder().decode(bytes)` após `atob`. Caracteres multibyte UTF-8 se expandem: '你' são 3 bytes (0xe4 0xbd 0xa0) → 4 caracteres base64 (8 caracteres base64 para '你好'). Segundo, Base64URL (RFC 4648 §5) substitui '+' e '/' por '-' e '_' e remove o preenchimento, porque '+' e '/' são significativos para URLs e '=' termina strings de consulta. JWT (RFC 7519) e JWS (RFC 7515) exigem Base64URL exatamente por essa razão. Base64 é codificação, não criptografia — a forma codificada tem zero sigilo, e o alfabeto é tão curto que qualquer observador lê o resultado trivialmente. Confundir Base64 com um mecanismo de segurança é um padrão de CVE: CVE-2004-2761 documentou a colisão de prefixo escolhido MD5 em X.509 que permitia a falsificação de certificados com assinaturas MD5 em colisão, enquanto CVE-2005-4900 e outros envolviam a prática antiga de hashes de senha md5crypt `$1$` sendo recodificados ou re-hasheados por uma camada de autenticação que confundia bytes decodificados de Base64 com credenciais novas. O padrão que se repete é o mesmo: um sistema trata a codificação como se adicionasse uma camada de sigilo que ela não adiciona, e o resultado é explorável. Para segredos reais, use AES-GCM (RFC 5288) ou ChaCha20-Poly1305 (RFC 8439). Para compressão seguida de Base64 (que `gzip -b64` faz), observe que a forma codificada é aproximadamente 1,37x o tamanho comprimido, e qualquer mudança de byte no fluxo comprimido quebra a decodificação — então Base64 é uma camada de integridade pobre; HMAC-SHA256 sobre os bytes antes da codificação é a abordagem correta.

  • RFC 4648 (outubro de 2006) define Base64, Base32 e Base16 com um alfabeto canônico (A-Z, a-z, 0-9, +, /) e '=' como caractere de preenchimento. A variante MIME (RFC 2045) insere quebras de linha a cada 76 caracteres para transporte; a variante segura para URL (Base64URL, RFC 4648 §5) substitui + e / por - e _ e remove o preenchimento — usada por JWT (RFC 7519), JWS (RFC 7515) e JWK (RFC 7517).
  • Mecanismo: 3 bytes de entrada (24 bits) → 4 caracteres de saída (cada 6 bits). A sobrecarga é de 33,3% — cada 1 MB de entrada binária se torna 1,33 MB de Base64. Para ASCII, a proporção pode ser ainda pior quando a entrada contém '=' ou outros caracteres que são escapados por protocolos adjacentes.
  • Regra de preenchimento: comprimento da entrada mod 3 = 0 → sem preenchimento; mod 3 = 1 → '==' (dois caracteres de preenchimento, um byte codificado); mod 3 = 2 → '=' (um caractere de preenchimento, dois bytes codificados). '=' não carrega informação; apenas permite que o decodificador saiba quantos bytes foram descartados.
  • Armadilha UTF-8 + btoa: `btoa('é')` lança InvalidCharacterError porque btoa trata a entrada como unidades de código Latin-1. A página contorna isso codificando através de `TextEncoder` (UTF-8) antes de btoa, e decodificando através de `TextDecoder` após atob. Sem essa etapa, qualquer coisa fora de U+0000..U+00FF se torna '0 bytes codificados' em vez de um erro.
  • Base64URL é exigido para JWT, JWS e JWK (RFC 7519/7515/7517). Usa '-' e '_' em vez de '+' e '/' (caracteres significativos para URLs) e remove o preenchimento '=' (que termina strings de consulta). Passar um segmento de cabeçalho JWT para um decodificador Base64 em vez de Base64URL retorna lixo; a página não auto-detecta — escolha a variante correta para o payload.
  • Desempenho: a codificação é aproximadamente 400-700 MB/s no V8 em um laptop moderno (um loop apertado fazendo buscas em tabela e deslocamentos de bits). A decodificação tem velocidade semelhante. Para blobs grandes (10+ MB), o gargalo é a alocação, não o cálculo — o buffer de saída é 33% maior e `TextEncoder/TextDecoder` faz uma cópia.
  • Base64 é codificação, não criptografia — qualquer pessoa com a string pode lê-la. CVE-2004-2761 (colisão de prefixo escolhido MD5 em X.509 em assinaturas de certificado) e muitos writeups de MISC-CTF usam esse equívoco como primeiro degrau. Para segredos, use AES-GCM (RFC 5288) ou ChaCha20-Poly1305 (RFC 8439). Para URIs de dados, observe o tamanho codificado: uma imagem de 10 MB se torna uma URL de 13,3 MB, que excede a maioria dos limites de comprimento de URL dos navegadores e a maioria dos limites de tamanho de email.
  • Nota de migração: Base16 (hex) é preferida em protocolos de baixo nível e saída de hash porque cada byte mapeia para exatamente 2 caracteres e o comprimento é previsível (sem matemática de preenchimento). Base32 é preferida para transcrição humana (sem caracteres visualmente semelhantes). Base64 é o padrão universal para transporte binário em protocolos de texto, mas está sendo gradualmente substituído por bytes crus sobre HTTP/2 e WebTransport onde o framing permite.

Exemplos

Codificar texto ASCII

Entrada: Hello
Saída:   SGVsbG8=    (5 bytes -> 8 caracteres, 1 caractere de preenchimento)

Entrada: Hello, World!
Saída:   SGVsbG8sIFdvcmxkIQ==    (13 bytes -> 18 caracteres, 1 caractere de preenchimento)

Entrada: Man
Saída:   TWFu    (3 bytes -> 4 caracteres, sem preenchimento)

O exemplo 'Man' é o vetor canônico da RFC 4648: os bytes 0x4D 0x61 0x6E
se compactam no valor de 24 bits 0x4D616E, dividido em blocos de 6 bits 0x0D 0x16
0x0E 0x0A, e mapeados para T W F u via o alfabeto padrão.

Codificar texto UTF-8 (chinês)

Entrada: ni hao   (3 bytes ASCII)
Saída:   5L2g5aW9    (8 caracteres)

Entrada: ni hao shi jie   (4 caracteres CJK, 12 bytes UTF-8)
Saída:   5L2g5aW95LiW55WM    (16 caracteres)

Cada caractere CJK se expande para 3 bytes UTF-8 (E4 BD A0 etc.), então
a saída Base64 cresce ~4/3 e depois ~4/3 novamente - cerca de 2,67x a
contagem de caracteres na saída codificada. A página passa primeiro por
TextEncoder().encode(str) para evitar a armadilha do btoa('InvalidCharacterError')
em entrada não ASCII.

Decodificar e fazer round-trip de um segmento JWT

Codificado: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
Decodificado: {"alg":"HS256","typ":"JWT"}

Round-trip:
  encode('{"alg":"HS256","typ":"JWT"}') -> eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
  decode('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9') -> {"alg":"HS256","typ":"JWT"}

Os segmentos JWT usam Base64URL, então a página deve aceitar '-' / '_'
juntamente com os '+' / '/' padrão. Um cabeçalho JWT enviado a um decodificador
Base64 estrito retorna lixo - escolha a variante correta para o
payload.

Base64 vs Base64URL

Entrada: Hello><h2>

Padrão:      SGVsbG8+PGgyPg==    (preenchimento + / =; seguro dentro de JSON / e-mail)
URL-safe:    SGVsbG8-PGIyPg       (- _ sem preenchimento; seguro dentro de paths/queries de URL)

Diferenças:
  '+' (62)  ->  '-'   e  '/' (63)  ->  '_'
  o preenchimento '=' é totalmente removido na forma URL-safe
Use Base64URL para JWT, JWS, JWK e qualquer token que trafegue em uma
query string de URL, porque '+' / '/' têm significado em URLs e '='
encerra a query.

Perguntas frequentes

Base64 é criptografia?

Não. Base64 é uma codificação, não criptografia. Ele apenas converte bytes arbitrários em 64 caracteres ASCII imprimíveis (A-Z, a-z, 0-9, +, /) para que sobrevivam a sistemas que distorcem dados binários. Qualquer pessoa com a string codificada pode decodificá-la de volta na hora — não há segredo envolvido.

Por que minha saída codificada termina com um ou dois sinais de igual?

Base64 emite 4 caracteres de saída para cada 3 bytes de entrada. Quando o comprimento da entrada não é múltiplo de 3, o codificador preenche com = para que o tamanho do resultado continue múltiplo de 4. Um byte sobrando → dois ='s; dois bytes sobrando → um =; entrada alinhada → nenhum. Algumas implementações omitem o padding, o que é legal, mas nem sempre interoperável.

O que é Base64 URL-safe?

O Base64 padrão inclui / e +, que têm significado especial em URLs e nomes de arquivo. O Base64 URL-safe (RFC 4648 §5) os substitui por _ e - e geralmente descarta o padding =. Use-o para tokens JWT, parâmetros de URL e nomes de arquivo; use o Base64 padrão em todos os outros casos.

Por que a string Base64 fica ~33% maior que o original?

Cada 6 bits de entrada viram um caractere de 8 bits na saída, então tamanho codificado = ceil(input_length / 3) * 4. Isso corresponde a aproximadamente 4/3 da entrada (33% de overhead). Esse é o custo de representar bytes arbitrários em ASCII imprimível.

Quais formatos de entrada posso colar aqui?

Para codificar, cole texto puro (codificado em UTF-8 internamente) ou envie um arquivo. Para decodificar, cole uma string Base64 com ou sem espaços em branco — o decodificador remove quebras de linha automaticamente. Se a decodificação falhar, verifique caracteres estranhos ou padding = faltando.

O Base64 pode carregar conteúdo de arquivo binário?

Sim. Esse é seu principal caso de uso — imagens inline em HTML/CSS (URLs data:), anexos de e-mail (MIME) e credenciais em cabeçalhos HTTP (Basic Auth) usam Base64 para colocar conteúdo binário em canais somente texto. Esteja ciente de que o payload resultante é 33% maior que o arquivo bruto.

Devo usar Base64 para esconder dados sensíveis?

Nunca. Base64 é totalmente reversível sem chave — tratá-lo como ofuscação é um erro comum que já vazou senhas e tokens em muitos incidentes reais. Use criptografia adequada ou um gerenciador de segredos para qualquer coisa sensível.