Base64 em um minuto
Os computadores guardam tudo como bytes, e um byte pode ter 256 valores diferentes. Muitos protocolos e formatos mais antigos, como e-mail, URLs, strings JSON e cabeçalhos HTTP, foram pensados para texto legível e podem estragar ou recusar bytes fora de um pequeno conjunto seguro. O Base64 resolve isso reescrevendo os bytes com caracteres que sobrevivem em qualquer lugar.
A ferramenta abaixo codifica o texto em Base64 enquanto você digita e decodifica de volta com um clique em Decodificar. O texto é convertido para UTF-8 antes, então letras acentuadas como ç e ã, outros alfabetos e emojis voltam exatamente como eram. A linha de status mostra quantos bytes de texto viraram quantos bytes de Base64.
Experimente aqui: Codificar Base64
Abrir a página completa da ferramentaComo a codificação funciona, passo a passo
O Base64 pega a entrada de 3 em 3 bytes (24 bits) e divide esses 24 bits em quatro grupos de 6 bits. Seis bits comportam um número de 0 a 63, e cada número é buscado num alfabeto fixo: de 0 a 25 são A a Z, de 26 a 51 são a a z, de 52 a 61 são 0 a 9, 62 é + e 63 é /.
Pegue a palavra Man. Os bytes dela são 77, 97 e 110, ou 01001101 01100001 01101110 em binário. Reagrupados em blocos de 6 bits, ficam 010011 010110 000101 101110, que são 19, 22, 5 e 46, e isso corresponde a T, W, F e u. Então Man vira TWFu.
Quando o tamanho da entrada não é múltiplo de 3, o último grupo recebe preenchimento. Um byte que sobra gera dois caracteres mais ==, dois bytes que sobram geram três caracteres mais =. É por isso que Ma vira TWE= e M vira TQ==, e por isso Hello (5 bytes) vira SGVsbG8=.
Por que o Base64 fica 33 por cento maior
Quatro caracteres de saída carregam a informação de três bytes de entrada, então o tamanho cresce num fator de 4/3, mais até dois caracteres de preenchimento. Alguns sistemas também inserem uma quebra de linha a cada 76 caracteres (MIME, no e-mail) ou a cada 64 caracteres (certificados PEM), o que soma mais alguns por cento.
| Tamanho original | Tamanho em Base64 | Com linhas de 76 caracteres |
|---|---|---|
| 3 bytes | 4 bytes | 4 bytes |
| 1 KB (1.024 bytes) | 1.368 bytes | cerca de 1,4 KB |
| 100 KB | cerca de 133 KB | cerca de 137 KB |
| 1 MB | cerca de 1,33 MB | cerca de 1,37 MB |
| Anexo de e-mail de 10 MB | cerca de 13,3 MB | cerca de 13,7 MB |
Onde você encontra Base64
- Anexos de e-mail: o MIME codifica arquivos em Base64 com linhas de 76 caracteres, e é por isso que um arquivo de 20 MB pode ser recusado por um serviço de e-mail com limite de 25 MB por mensagem: codificado, ele passa de 27 MB.
- Data URIs: imagens, fontes e ícones embutidos no HTML ou no CSS como data:image/png;base64, seguido do arquivo codificado.
- Autenticação HTTP Basic: o cabeçalho Authorization: Basic seguido de usuario:senha em Base64. Qualquer pessoa que veja o cabeçalho consegue ler, então só é seguro com HTTPS.
- JSON Web Tokens: o cabeçalho e o payload são JSON codificados em Base64url, e é por isso que um JWT começa com eyJ (a codificação dos caracteres {").
- Certificados e chaves: arquivos PEM são Base64 entre as linhas BEGIN e END.
- APIs e configuração: dados binários em campos JSON, secrets do Kubernetes, variáveis de ambiente e exportações de banco de dados. Muitas integrações brasileiras, como o envio de XML de nota fiscal eletrônica ou de PDFs de boleto por API, também trafegam o arquivo como string Base64.
Variantes do Base64: padrão, seguro para URL e MIME
O Base64 padrão (RFC 4648) usa + e / e completa com =. Esses três caracteres têm significado especial em endereços da web, então existe uma variante segura para URL, muitas vezes chamada de Base64url, que usa hífen e sublinhado no lugar deles e normalmente dispensa o preenchimento. JWTs e muitas APIs web usam essa forma. Na ferramenta, ative Seguro para URL para obter essa versão; o decodificador aceita as duas formas e também o preenchimento ausente.
O Base64 MIME, usado no e-mail, é o Base64 padrão dividido em linhas de no máximo 76 caracteres. Ative Linhas de 76 caracteres quando precisar de uma saída para o corpo de um e-mail ou para um arquivo no estilo PEM.
Base64 não é criptografia
Não existe chave nem segredo. Quem vê cGFzc3dvcmQxMjM= decodifica para password123 em um segundo. Trate credenciais, tokens e configurações em Base64 exatamente como texto puro: não faça commit deles em repositórios públicos, não cole em sites de confiança duvidosa e não use Base64 para esconder nada. Os secrets do Kubernetes, por exemplo, vêm codificados em Base64 por padrão, não criptografados.
Se você precisa de sigilo, use criptografia de verdade (como AES por meio de uma biblioteca adequada) e depois, se o texto cifrado tiver que viajar como texto, codifique esse resultado em Base64.
Problemas comuns ao decodificar
- Letras acentuadas embaralhadas: o texto foi codificado com outro conjunto de caracteres. No JavaScript, btoa só aceita caracteres até o código 255 e os codifica como Latin 1, então ü vira /A== em vez da forma UTF-8 w7w=, e caracteres como o símbolo do euro geram erro. Use um codificador que entenda UTF-8, como a ferramenta desta página.
- Erros de caractere inválido: a string contém espaços, quebras de linha ou caracteres da variante segura para URL que um decodificador rígido recusa. Esta ferramenta ignora quebras de linha e aceita os dois alfabetos.
- O tamanho não é múltiplo de 4: o preenchimento foi removido. Acrescente = até o tamanho ser divisível por 4, ou use um decodificador que resolva isso para você.
- O resultado parece um monte de símbolos aleatórios: os dados são binários, como uma imagem, um PDF ou um ZIP. A ferramenta avisa que são dados binários, identifica o tipo de arquivo quando consegue e deixa você salvar com Baixar.
Codificando na linha de comando
No Linux, base64 arquivo.txt codifica e base64 -d arquivo.b64 decodifica. No macOS existe o mesmo comando base64; versões mais antigas usam -D para decodificar. No Windows PowerShell, [Convert]::ToBase64String([IO.File]::ReadAllBytes("arquivo.bin")) codifica um arquivo, e certutil -encode entrada saida funciona no Prompt de Comando, mas acrescenta linhas de cabeçalho BEGIN e END. Para testes rápidos com texto, a ferramenta no navegador é mais rápida e não deixa os dados no histórico do terminal.