Como decodificar Base64
- Cole o Base64 na caixa Entrada · Base64. Quebras de linha, espaços, aspas em volta e um prefixo
data:...;base64,podem ficar; o decodificador os remove. - O texto decodificado aparece em Saída · texto. Uma linha de status informa Base64 válido, a variante (Standard ou Base64URL), o número de bytes decodificados e, em Parece ser, o tipo de conteúdo detectado.
- Se o texto sair embaralhado, troque o Charset ou escolha Detectar automaticamente.
- Se o conteúdo for JSON, Formatar JSON o indenta para leitura.
- Clique em Copiar saída, ou em Baixar para salvar os bytes decodificados como arquivo. A extensão segue o tipo detectado, então JSON é salvo como
decoded.jsone um PNG comodecoded.png.
Inverter manda o texto decodificado de volta para a entrada e muda para codificação, um jeito rápido de confirmar que a string faz o caminho de ida e volta.
O que o decodificador aceita
O Base64 raramente chega limpo. Ele vem quebrado em 76 caracteres de um e-mail, entre aspas de um arquivo JSON, com codificação percentual de uma URL ou sem preenchimento de um token. O decodificador aceita tudo isso sem nenhuma configuração:
| Você cola | Você recebe | O que aconteceu |
|---|---|---|
SGVsbG8gV29ybGQ | Hello World | = ausente restaurado, a linha de status avisa |
8J-Riw | 👋 | - e _ URL-safe reconhecidos, variante mostrada como Base64URL |
data:text/plain;base64,SGk= | Hi | Prefixo de data URI removido |
"SGVsbG8=" | Hello | Aspas de código ou JSON removidas |
SGVsbG8%3D | Hello | %3D codificado para URL lido como = |
SGVs (quebra de linha) bG8= | Hello | Quebras de linha e espaços ignorados |
O decodificador é tolerante com essa embalagem e rígido com todo o resto: um caractere fora do alfabeto o interrompe, com um erro que indica o caractere e a posição. Algumas bibliotecas, ao contrário, pulam caracteres inválidos em silêncio e devolvem uma saída corrompida (veja a seção de código abaixo).
Para tokens URL-safe, o decodificador Base64URL explica o alfabeto, e Base64 vs Base64URL mostra as diferenças.
Quando o Base64 decodificado é um arquivo
O Base64 transporta quaisquer bytes, e muitas strings Base64 são imagens ou documentos. A ferramenta compara os primeiros bytes dos dados decodificados com assinaturas de arquivo conhecidas (magic numbers) e mostra o resultado em Parece ser: PNG, JPEG, PDF, ZIP, gzip, JSON, XML e muitos outros. Para formatos binários, ela mostra uma prévia imprimível, avisa que os dados são binários e indica a ferramenta certa, como Base64 para imagem ou Base64 para PDF. Baixar salva os bytes originais de qualquer forma.
O início de uma string Base64 muitas vezes entrega o formato antes mesmo de decodificar:
| O Base64 começa com | Bytes decodificados | Formato |
|---|---|---|
iVBORw0KGgo | 89 50 4E 47 0D 0A 1A 0A | Imagem PNG |
/9j/ | FF D8 FF | Imagem JPEG |
JVBERi0 | %PDF- | Documento PDF |
UEsDBA | PK 03 04 | ZIP, e também DOCX e XLSX |
H4sI | 1F 8B 08 | Dados gzip (decodificador de Base64 gzip) |
eyJ | {" | JSON, muitas vezes um segmento de JWT |
PD94bWwg | <?xml | XML |
Mais assinaturas estão listadas em prefixos Base64 comuns. Para um arquivo de tipo desconhecido, Base64 para arquivo detecta o formato e mostra a prévia.
Charsets: como consertar texto embaralhado
O Base64 guarda bytes e não diz nada sobre qual charset transformou os caracteres nesses bytes. O decodificador assume UTF-8, o que está certo para a maioria dos dados modernos. Quando está errado, os sintomas são reconhecíveis:
- Caracteres
�e o aviso “Alguns bytes não são UTF-8 válido”. O texto veio de um charset legado.Y2Fm6Q==aparece comocaf�em UTF-8 e comocaféem ISO-8859-1 ou Windows-1252. Texto em russo comoz/Do4uXyprecisa de Windows-1251 para mostrarПривет. - Um ponto ou espaço depois de cada letra. Isso é UTF-16, em que letras ASCII são seguidas de um byte zero.
SABlAGwAbABvAA==éHelloem UTF-16LE (Base64 para UTF-16). é,üou’na saída. A decodificação está correta; o texto foi codificado duas vezes antes de virar Base64, porque alguma etapa anterior leu UTF-8 como se fosse Latin-1 e gravou o resultado de novo como UTF-8.Y2Fmw4PCqQ==decodifica exatamente paracafé. Corrija na origem.
Detectar automaticamente procura uma marca de ordem de bytes, depois verifica se os bytes são UTF-8 válido e, por fim, o padrão de bytes zero do UTF-16. Code pages de um byte, como Windows-1251 e KOI8-R, parecem iguais para qualquer detector, então escolha-as manualmente quando souber a origem.
Mensagens de erro e o que significam
| Mensagem | Causa habitual | Solução |
|---|---|---|
| Caractere inválido “.” na posição 21 | Um JWT inteiro colado: os pontos separam três segmentos | Decodifique um segmento ou use o decodificador de JWT |
Caractere inválido "\\" na posição 8 | Base64 copiado de um JSON em que / virou \/ | Troque \/ por / |
| A entrada mistura caracteres padrão (+ /) e URL-safe (- _) | Duas strings juntas ou uma conversão feita pela metade | Converta para um único alfabeto com Base64URL para Base64 |
| O preenchimento (=) só pode aparecer bem no final | Dois valores Base64 colados, como SGk=SGk= | Separe e decodifique cada um |
| Comprimento incorreto: há um caractere a mais ou a menos | A cópia perdeu ou ganhou um caractere | Copie de novo ou experimente Reparar Base64 |
O guia de erros de Base64 aprofunda cada caso. Para encontrar o caractere ou o problema de preenchimento exato numa string, use o validador de Base64.
Decodificar Base64 em JavaScript, Python e na linha de comando
O atob() devolve uma “binary string” com um caractere por byte, então texto UTF-8 precisa de um passo com TextDecoder. O atob aceita preenchimento ausente, mas lança InvalidCharacterError com - e _ URL-safe.
const s = "R3LDvMOfZSDwn5GL";
new TextDecoder().decode(Uint8Array.from(atob(s), c => c.charCodeAt(0)));
// "Grüße 👋"
// Node.js accepts both alphabets
Buffer.from(s, "base64").toString("utf8"); // "Grüße 👋"
Buffer.from("8J-Riw", "base64url").toString("utf8"); // "👋"
O Python lança binascii.Error: Incorrect padding com entrada sem preenchimento, então adicione o preenchimento você mesmo:
import base64
s = "SGVsbG8"
base64.b64decode(s + "=" * (-len(s) % 4)).decode("utf-8")
# 'Hello'
base64.b64decode("SGVs*bG8=", validate=True)
# binascii.Error: Only base64 data is allowed
Sem validate=True, o Python descarta o * e devolve b'Hello'. O Buffer.from do Node se comporta do mesmo jeito, então uma string danificada pode ser decodificada sem erro nenhum.
Na linha de comando:
printf '%s' 'R3LDvMOfZSDwn5GL' | base64 -d
base64 -d message.b64 > message.bin
A primeira linha imprime Grüße 👋. Versões antigas do macOS escrevem a flag como -D. Mais detalhes por linguagem: JavaScript, Node.js, Python, PHP.
Perguntas frequentes
Como decodificar uma string Base64?
Cole a string na caixa de entrada acima; o texto decodificado aparece na hora. No código, decodifique o Base64 em bytes e depois leia os bytes como UTF-8: base64.b64decode(s).decode() em Python, Buffer.from(s, "base64").toString() no Node.js.
Por que o texto decodificado mostra caracteres estranhos como � ou é?
� significa que os bytes não são UTF-8 válido, então o texto provavelmente foi codificado em outro charset; experimente Windows-1252, Windows-1251 ou UTF-16LE no menu Charset. é no lugar de é significa que o texto já estava corrompido antes de alguém codificá-lo.
Dá para decodificar Base64 sem o preenchimento =?
Dá. O decodificador adiciona sozinho o = que falta e avisa na linha de status. O preenchimento só completa o último bloco, então sempre pode ser restaurado a partir do comprimento.
A saída decodificada não faz sentido. O Base64 está quebrado?
Na maioria das vezes, os dados são um arquivo. Confira o campo “Parece ser” na linha de status: para imagens, PDFs, arquivos compactados e outros formatos binários, a ferramenta indica um decodificador que mostra a prévia ou salva o arquivo.
Dá para decodificar Base64 sem chave?
Sempre. Base64 é uma codificação com alfabeto público, então não oferece sigilo nenhum. Se o resultado decodificado ainda parecer aleatório, os dados foram criptografados ou compactados antes de serem codificados.