O que significam « codificar » e « decodificar » em Base64?
Codificar em Base64 (« encode base64 ») transforma bytes — normalmente os bytes de um texto codificado em UTF-8 — em uma string de 64 caracteres permitidos: as 26 letras maiúsculas, as 26 letras minúsculas, os 10 dígitos, e então + e /. Decodificar Base64 (« decode base64 ») faz exatamente a operação inversa: a string é lida em blocos de 4 caracteres, cada caractere indica 6 bits, e 24 bits resultam em 3 bytes. É essa ida e volta que a maioria das pessoas procura quando digita « encode and decode base64 ».
Base64 não é compressão nem criptografia: o texto fica cerca de um terço mais longo e qualquer pessoa pode lê-lo em um segundo. Seu interesse é transportar bytes por canais que só aceitam caracteres ASCII seguros — URL, cabeçalhos HTTP, arquivos de configuração, JSON, SVG inline, e-mails, bancos de dados textuais.
Como codificar um texto em Base64
Etapa 1: o texto é primeiro codificado em bytes conforme o jogo de caracteres escolhido — UTF-8 por padrão, mas Latin-1, Windows-1252, ASCII ou UTF-16 continuam úteis para legado. Etapa 2: os bytes são lidos três a três, ou seja, 24 bits. Etapa 3: esses 24 bits são divididos em quatro blocos de 6 bits, e cada bloco é substituído pelo caractere da posição correspondente no alfabeto. Etapa 4: se o último grupo estiver incompleto, ele é completado com bits zero e a string é fechada com um ou dois = (o padding).
Exemplo passo a passo: « AB » vale 65 e depois 66 em decimal, ou seja 01000001 01000010. Em três bytes com complemento: 01000001 01000010 00000000. Os quatro grupos de 6 bits são 010000 010100 001000 000000 → posições 16, 20, 8, 0 → QUI=. Basta digitar « AB » no codificador: o resultado aparece antes mesmo de você soltar a tecla.
Como decodificar Base64 em texto
A decodificação lê a string em grupos de 4 caracteres depois de remover quebras de linha e espaços opcionais. Cada caractere é substituído por seu valor de 6 bits, os quatro valores são concatenados em 24 bits e então os 24 bits são divididos em 3 bytes. Os = finais indicam quantos bytes realmente úteis contém o último grupo: um = significa 2 bytes, dois = significam 1 byte.
Se a string contiver - ou _, trata-se da variante URL-safe: a ferramenta os converte automaticamente para + e / antes da decodificação. Se o padding faltar, o botão « Corrigir o padding » o restaura. Em caso de caractere fora do alfabeto, de aba fora de lugar ou de comprimento não múltiplo de 4, o erro é exibido com o motivo exato em vez de um simples « inválido ».
Variante URL-safe (RFC 4648 §5)
O Base64 padrão usa + e /, dois caracteres que causam problema em uma URL: o + é interpretado como espaço pela maioria dos servidores, e o / pode ser confundido com um separador de caminho. A variante URL-safe os substitui por - e _, que não exigem nenhum escape. Ela é obrigatória nos JWT (os três segmentos de um token são codificados sem padding), nos cookies, nos identificadores e nos parâmetros de URL.
Padding « = »: para que serve
O Base64 trabalha em grupos de 4 caracteres, mas o tamanho de um arquivo quase nunca é múltiplo de 3 bytes. O padding restabelece o comprimento esperado: sobrando 1 byte, resulta em ==, sobrando 2 bytes, resulta em =. Alguns sistemas o removem (certas APIs, Base64URL); outros o exigem (PHP, decodificadores antigos). A opção « Sem padding » do codificador e o botão « Corrigir o padding » do decodificador cobrem os dois casos.
Codificação de caracteres: UTF-8, Latin-1, UTF-16
Base64 não conhece caracteres, apenas bytes. A questão crucial é, portanto: que codificação dar ao texto antes do Base64? Em UTF-8, « é » tem 2 bytes e « 日 » tem 3; em Latin-1, « é » cabe em 1 byte, mas « 日 » se torna impossível. Uma decodificação UTF-8 de uma string codificada em Latin-1 produz caracteres aberrantes (« mojibake »). Se você testa uma ferramenta online e o resultado é incompreensível, quase sempre é a codificação de origem que difere — daí as seis opções oferecidas aqui.
Arquivo, data URI e imagens em Base64
Uma data URI tem a forma data:<tipo MIME>;base64,<dados>. Ela permite embutir diretamente uma imagem no CSS, no HTML ou no JSON: background-image:url(data:image/png;base64,iVBOR…). Para decodificar, cole a string inteira na aba « Arquivo ⇄ Base64 »: o tipo MIME é extraído, o nome é sugerido e o arquivo é regenerado e fica disponível para download. Atenção ao tamanho: o Base64 acrescenta cerca de 33 % e uma data URI nunca é armazenada em cache separadamente.
Base64, URL-encoding e por que não confundi-los
O percent-encoding (%20, %C3%A9) substitui cada byte não autorizado por uma porcentagem: fica de duas a três vezes mais longo que o Base64, mas preserva o texto original à vista. O Base64 produz uma string compacta e uniforme, perfeita para blobs, mas ilegível. A aba « URL & data URI » oferece as duas conversões lado a lado para evitar o erro clássico de codificar uma URL em Base64 quando ela deveria ser escapada — ou o contrário.
Base64 nos formatos do dia a dia
O Base64 está em toda parte: os três segmentos de um JWT, o atributo src de uma imagem SVG inline, o campo cert de um PDF, os attachments MIME dos e-mails (RFC 2045), os Authorization: Basic das APIs (usuário:senha), os arquivos .pem e as chaves SSH, o conteúdo dos .docx e .xlsx (ZIP), os avatares no armazenamento do cliente e os data- attributes dos testes automatizados. Saber codificar e decodificar rapidamente evita abrir um terminal por causa de uma única string.
O que Base64 não é
Base64 não criptografa nada: uma string codificada é decifrada em uma linha de código. Nunca o use como proteção de senha, de chave API ou de dados pessoais. Também não é compressão: preveja sempre 33 % a mais de volume. Por fim, o Base64 não é adequado para binário já comprimido e denso (PNG, ZIP) acima de alguns megabytes, quando o custo de memória passa a pesar.
Desempenho e boas práticas
No navegador, TextEncoder e TextDecoder tratam vários megabytes por segundo; o próprio algoritmo Base64 é linear, sem recursão nem alocação por caractere. Arquivos com mais de 5 MB podem deixar a interface lenta: para lotes maiores, prefira o processamento em Web Worker ou no servidor. Mantenha sempre a codificação de origem documentada ao lado da string e teste o round-trip (codificar e depois decodificar) antes de armazenar um resultado em banco de dados.
Recomendado para
Desenvolvedores back-end e front-end (tokens, data URI, cabeçalhos HTTP), integradores e redatores técnicos (SVG inline, imagens de fundo), administradores de sistema e DevOps (certificados, chaves, dumps), testadores e pentesters (Authorization Basic, fuzzing de parâmetros), estudantes (entender bytes, ASCII e UTF-8) e qualquer pessoa que precise de um codificador e decodificador Base64 online rápido, completo e confidencial.