Decodificar e codificar Base64: para PDF, imagem ou arquivo

Cole o Base64 para decodificar e ter o arquivo de volta, seja PDF, imagem, texto ou JWT, ou solte um arquivo para obter o Base64 dele. Tudo acontece nesta aba.

Reconhece 33 formatos de arquivo pelos próprios bytes · RFC 4648 · nada é enviado
Codificado

Cole algo acima, solte um arquivo no painel ou clique em um dos exemplos.

Experimente

Tudo fica nesta aba: nada do que você cola ou solta é enviado, e HTML ou script decodificado aparece como texto, nunca é executado.

3 bytes → 4 caracteres
Exemplo: Man
M77 · 4DByte 1
a97 · 61Byte 2
n110 · 6EByte 3
1922546

Três bytes têm 24 bits. O Base64 corta esses mesmos 24 bits em quatro grupos de seis, e cada grupo indica um de 64 caracteres. As linhas brancas marcam onde os bytes terminam: elas não coincidem com os grupos, e esse é todo o truque.

Caractere 1

16 + 2 + 1 = 19 T

Índice 19 no alfabeto padrão.

1onde um byte terminaadicionado, não é seudiferente no seguro para URLAponte para um caractere para ver os seis bits dele somados.

Como usar o decodificador e codificador Base64

Cole qualquer coisa no campo único (texto, Base64, uma data: URI inteira ou um JWT), clique em Escolher arquivo ou solte um arquivo no painel. A ferramenta descobre a direção, mostra no indicador e deixa a outra leitura a um clique.

Ao decodificar um arquivo, você recebe o tipo lido dos próprios bytes, o tamanho, as dimensões em pixels de uma imagem, a aba Visualização de uma imagem ou de um PDF e um download com a extensão certa. Ao codificar um, você recebe o Base64, uma data: URI pronta e quanto a codificação custou em tamanho. As opções Alfabeto, Preenchimento e Quebras de linha, abaixo do resultado, mudam a saída.

Decodificador Base64: uma string Base64 vira um documento PDF, com tipo, tamanho e a figura de 3 bytes para 4 caracteresDecodificador Base64: uma string Base64 vira um documento PDF, com tipo, tamanho e a figura de 3 bytes para 4 caracteresUm campo, nos dois sentidosCole texto, Base64, uma data: URI ou um JWT. O indicador diz como foi lido; o menu muda isso.Escolher arquivoOu solte um arquivo em qualquer lugar do painel: ele vira Base64 e uma data: URI, sem sair da aba.O que os bytes sãoAo decodificar, o resultado abre com o tipo do arquivo, o tamanho e a assinatura, depois uma prévia e o download.Opções de saídaAlfabeto padrão ou seguro para URL, preenchimento ligado ou desligado, e linhas quebradas para MIME ou PEM.3 bytes → 4 caracteresOs seus próprios bytes, recortados em grupos de seis. Aponte para um caractere para ver os bits dele somados.
A ferramenta decodificando um PDF. Selecione um número para ver o que cada parte faz.

O que é Base64 e por que ele existe?

O Base64 escreve quaisquer bytes com 64 caracteres que passam por qualquer lugar: A–Z, a–z, 0–9, + e /. Ele existe porque e-mail, URLs, JSON e XML foram feitos para texto, e um byte bruto pode ser um código de controle, uma aspa ou um nulo que os quebra.

Ele pega três bytes por vez, enfileira os 24 bits deles e corta a fila em quatro grupos de seis. Seis bits comportam 64 valores, então cada grupo indica exatamente um caractere. Três bytes entram, quatro caracteres saem, sempre: é por isso que o Base64 fica cerca de um terço maior do que o original.

Man → TWFu
M77 · 4DByte 1
a97 · 61Byte 2
n110 · 6EByte 3
1922546TWFu

Três bytes têm 24 bits. O Base64 os recorta em quatro grupos de seis, e cada grupo indica um de 64 caracteres imprimíveis, então três bytes sempre custam quatro caracteres. É daí que vem o aumento de 33%.

Ma → TWE=
M77 · 4DByte 1
a97 · 61Byte 2
sem byte—Byte 3
19224—TWE=

Dois bytes têm 16 bits. O Base64 adiciona 2 bits zero para completar o terceiro grupo, e um = ocupa o lugar do quarto caractere.

M → TQ==
M77 · 4DByte 1
sem byte—Byte 2
sem byte—Byte 3
1916——TQ==

Um byte tem 8 bits. O Base64 adiciona 4 bits zero para completar o segundo grupo, e dois = ocupam o lugar do terceiro e do quarto caracteres. O = não carrega bit nenhum.

As linhas brancas marcam onde um byte termina e o próximo começa. Elas não coincidem com os grupos de seis, e esse deslocamento é todo o mecanismo. Fonte: RFC 4648 §4

Como decodificar Base64 para PDF?

Cole a string e a ferramenta reconstrói o PDF: mostra a versão e o tamanho, abre o documento no visualizador de PDF do próprio navegador e oferece o download. Você não precisa dizer que é um PDF, nem remover antes um prefixo data:.

Um PDF é reconhecido pelos cinco primeiros bytes, %PDF-, então o arquivo é identificado mesmo quando o nome, o tipo que o remetente declarou ou o campo de onde ele veio dizem outra coisa. Se os bytes não forem um PDF, a página diz o que eles são, em vez de falhar ao abrir um documento que nunca existiu.

O arquivo é reconstruído no seu navegador. Nada é enviado, o que importa quando o PDF é um holerite, um contrato ou uma fatura.

JSON de uma API"document": "JVBERi0xLjcKJeLjz9MKMS…"Um campo de uma resposta. As aspas não fazem parte do Base64.
Um anexo de e-mailContent-Transfer-Encoding: base64O MIME quebra o corpo em linhas de 76 caracteres. Cole com as quebras de linha: elas são ignoradas.
Uma data: URIdata:application/pdf;base64,JVBERi0x…Cole tudo. O prefixo é lido, não precisa ser removido à mão.
Os primeiros bytes dizem o que é
  1. 25%
  2. 50P
  3. 44D
  4. 46F
  5. 2D-
  6. 311
  7. 2E.
  8. 377

Os primeiros 5 bytes, %PDF-, são a assinatura inteira. Os bytes 6 a 8 são a versão: 1.7. Nenhuma extensão de arquivo entra nisso, então um PDF que alguém nomeou como .txt continua voltando como PDF.

Três lugares de onde as pessoas copiam um PDF em Base64, e os bytes que o identificam depois de decodificado. Fonte: ISO 32000-1:2008 §7.5.2, RFC 8118 §8

Como converter imagem para Base64, e quando vale a pena?

Solte a imagem e você recebe o Base64 dela e uma data: URI pronta para colar em HTML ou CSS. Saber se vale a pena é a pergunta mais difícil: o Base64 sempre custa cerca de um terço a mais, e uma imagem embutida não pode ficar em cache sozinha.

No sentido contrário, de Base64 para imagem, você recebe o formato, o tamanho e as dimensões reais em pixels lidas do cabeçalho do próprio arquivo, não da imagem na tela, e um download com a extensão certa.

  • O arquivo no disco12,9 kB 100%
  • Em Base6417,3 kB +33,4%
  • Quebrado a cada 76 caracteres para MIME17,5 kB +35,1%
  • O arquivo, com gzip11,7 kB -9,5%
  • O Base64, com gzip12,5 kB -3,2%
Um arquivo de verdade
  • baixado uma vez
  • guardado em cache pelo navegador e pela CDN
  • buscado ao lado da página, não dentro dela
A mesma imagem embutida
  • um terço maior antes da compressão
  • em cache só como parte do arquivo que a contém
  • processada como parte da folha de estilo ou do HTML

A compressão recupera a maior parte: com gzip, o Base64 fica só 7% maior que o arquivo com gzip. O que ela não devolve é a entrada de cache própria da imagem: embutida numa página HTML, ela é baixada de novo com cada página que a traz.

A regra prática: embuta algumas centenas de bytes (um ícone, um espaçador, um logo num e-mail) e use link para qualquer coisa maior. Esta imagem PNG de 12,9 kB já passou do limite.

Medido na imagem que o exemplo da ferramenta decodifica: os mesmos bytes, levados de cinco jeitos, com gzip no nível mais alto. Fonte: RFC 2045 §6.8

Base64 x Base64 seguro para URL: qual é a diferença?

O Base64 seguro para URL (RFC 4648 §5) é a mesma codificação com dois caracteres trocados: + vira - e / vira _. O preenchimento também costuma ser omitido.

Use-o sempre que o resultado for para uma URL, um nome de arquivo ou um cookie. Os JSON Web Tokens o usam em todas as partes, e é por isso que as partes de um token nunca terminam em =. Esta ferramenta lê os dois alfabetos e avisa quando uma string traz os dois.

Padrão (RFC 4648 §4)+/8=
Seguro para URL (RFC 4648 §5)-_8=
base64url num JWT (RFC 7515 §2)-_8
  • + → -Índice 62. Numa query string, um decodificador de formulário lê + como espaço, e os dados voltam errados.
  • / → _Índice 63. Num caminho, / começa um novo segmento, e o valor é partido em dois.
  • = removidoNuma URL, o = costuma virar %3D pela codificação percentual (RFC 4648 §5). Um JWT o descarta de vez (RFC 7515 §2): só o comprimento já diz onde os bytes terminam.

Os primeiros 62 caracteres dos dois alfabetos são idênticos, e é por isso que uma ferramenta que lê os dois alfabetos decodifica qualquer um deles, e por isso esta página avisa quando uma string traz os dois.

Só 2 caracteres mudam entre os dois alfabetos. Todo o resto é igual. Fonte: RFC 4648 §5, RFC 7515 §2

Base64 é criptografia? Não.

O Base64 não esconde nada. Não há chave nem segredo, e revertê-lo não exige esforço algum: um decodificador como este faz isso enquanto você digita.

A autenticação HTTP Basic é onde isso mais importa: o cabeçalho leva o nome de usuário e a senha como uma única string Base64, legível por qualquer um que a veja, e é por isso que a RFC 7617 só a considera segura sobre uma conexão criptografada, como TLS. Se algo precisa ficar ilegível, precisa de criptografia. O Base64 só faz os bytes passarem com segurança por um canal feito para texto.

Um cabeçalho Authorization, como a RFC 7617 §2 o monta

Authorization: Basic dXNlcjpwYXNzd29yZA==

Um passo de volta: sem precisar de chave nem de senha

user:password

A RFC 7617 monta o cabeçalho passo a passo, e o último passo é toda a sua “proteção”: o cliente “obtém as basic-credentials codificando esta sequência de octetos usando Base64”. A §1 dela diz o que isso significa: a menos que TLS ou um sistema parecido proteja a conexão, “o user-id e a senha são passados pela rede como texto claro”. O Base64 não tem chave, então não há nada para quebrar: quem tem a string tem a senha.

As credenciais acima são inventadas. Lê-las de volta leva um passo e nenhuma chave: é isso que significa “codificação, não criptografia”. Fonte: RFC 7617 §2, §1

Por que meu texto decodificado aparece como mojibake (caracteres estranhos)?

Porque o Base64 carrega bytes, e bytes só viram letras quando algo escolhe uma codificação de caracteres. Leia um texto UTF-8 como se fosse ISO-8859-1 e é vira é; leia ISO-8859-1 como UTF-8 e ele vira um sinal de substituição.

Uma data: URI pode declarar o charset, e esta página lê o texto nesse charset em vez de forçar tudo por UTF-8. Quando o seu navegador não tem decodificador para o charset declarado, a página avisa, em vez de mostrar as letras erradas em silêncio.

“Café” escrito em UTF-8436166C3A9
“Café” escrito em ISO-8859-1436166E9

Em UTF-8, é ocupa 2 bytes; em ISO-8859-1, 1 byte. O Base64 carrega bytes, não letras, então a própria string não tem como dizer ao decodificador qual das duas era a intenção.

Lido do jeito certoCafé
Bytes UTF-8 lidos como ISO-8859-1Café
Bytes ISO-8859-1 lidos como UTF-8Caf�
O mojibake tem duas formas: um texto legível sem sentido (Café) quando UTF-8 é lido como uma página de código de um byte, e um sinal de substituição (Caf�) quando os bytes nem são UTF-8 válido. Fonte: RFC 4648 §4, RFC 2397 §4

Base64 em Python, JavaScript, Java, C#, Go, PowerShell e no shell

Toda linguagem tem Base64 embutido. As armadilhas são as mesmas em todas: codifique bytes, não uma string, e diga em que codificação de caracteres o texto está.

O btoa() do JavaScript é a parte mais traiçoeira: ele só aceita caracteres até U+00FF, então qualquer coisa além do Latin-1 precisa virar bytes UTF-8 com TextEncoder primeiro. Cada exemplo abaixo codifica e decodifica “Man” e foi executado para conferir a saída.

import base64

b64 = base64.b64encode("Man".encode("utf-8")).decode("ascii")
print(b64)                                    # TWFu
print(base64.b64decode(b64).decode("utf-8"))  # Man

Executado com Python 3.14.4 em 26 de outubro de 2026: imprime o que os comentários mostram.

Cada trecho foi executado com “Man” e imprime o que os comentários mostram. O base64 -d do shell é -D em versões antigas do macOS. Fonte: gnu.org, developer.mozilla.org

O alfabeto Base64, de 0 a 63

Cada grupo de seis bits é um número de 0 a 63, e esta é a tabela em que ele é consultado. O Base64 diferencia maiúsculas de minúsculas: A é 0 e a é 26, então trocar a caixa de uma letra quebra a string.

Vale a pena reconhecê-lo de vista: uma sequência de A é uma sequência de bytes zero, e uma string Base64 que começa com JVBER é um PDF, iVBOR um PNG e /9j/ um JPEG.

  1. A0
  2. B1
  3. C2
  4. D3
  5. E4
  6. F5
  7. G6
  8. H7
  9. I8
  10. J9
  11. K10
  12. L11
  13. M12
  14. N13
  15. O14
  16. P15
  17. Q16
  18. R17
  19. S18
  20. T19
  21. U20
  22. V21
  23. W22
  24. X23
  25. Y24
  26. Z25
  27. a26
  28. b27
  29. c28
  30. d29
  31. e30
  32. f31
  33. g32
  34. h33
  35. i34
  36. j35
  37. k36
  38. l37
  39. m38
  40. n39
  41. o40
  42. p41
  43. q42
  44. r43
  45. s44
  46. t45
  47. u46
  48. v47
  49. w48
  50. x49
  51. y50
  52. z51
  53. 052
  54. 153
  55. 254
  56. 355
  57. 456
  58. 557
  59. 658
  60. 759
  61. 860
  62. 961
  63. +Seguro para URL: -62
  64. /Seguro para URL: _63

0–25 são A–Z, 26–51 são a–z, 52–61 são 0–9. Só os dois últimos caracteres da tabela mudam entre os dois alfabetos, marcados acima. O = nem está na tabela: não é um valor, é a marca que diz que o último grupo de três bytes ficou curto.

Os 64 caracteres, na ordem em que a RFC 4648 §4 os apresenta. O número embaixo de cada um é o valor de seis bits que ele representa. Fonte: RFC 4648 §4

Base64: perguntas e respostas

O que é decodificar Base64?

Decodificar Base64 transforma cada grupo de quatro caracteres de volta nos três bytes que ele representa. Esses bytes podem ser texto ou um arquivo inteiro, como um PDF, uma imagem PNG ou um arquivo ZIP. Esta ferramenta lê os primeiros bytes para saber o que são e mostra o texto ou o próprio arquivo, em vez de uma tela de símbolos, e deixa você baixá-lo.

Como decodificar um arquivo Base64?

Cole a string Base64 no campo. A ferramenta a decodifica, compara os primeiros bytes com as assinaturas de arquivo que conhece (33 formatos de arquivo ao todo), diz o formato, mostra a prévia de uma imagem ou de um PDF e oferece o download com a extensão certa. Você nunca precisa dizer que tipo de arquivo é, e nada é enviado para descobrir.

Para que serve o Base64?

Ele leva bytes por lugares feitos para texto: anexos de e-mail (MIME), data: URIs em HTML e CSS, campos binários em JSON e XML, JSON Web Tokens, autenticação HTTP Basic, e certificados e chaves em arquivos PEM. Em todos os casos, os dados precisam passar por um canal que poderia alterar ou descartar bytes brutos, então eles viajam como letras e dígitos comuns.

Base64 é criptografia?

Não. Base64 é uma codificação, não uma cifra: não tem chave nem segredo, e qualquer pessoa o reverte num instante, como esta página faz enquanto você digita. Trate tudo o que está em Base64 como se estivesse à vista de todos. Se os dados precisam ficar privados, criptografe-os primeiro e depois codifique os bytes criptografados em Base64, se eles precisarem viajar como texto.

É seguro decodificar Base64 online?

Nesta página, sim, e você pode conferir: tudo é decodificado por JavaScript na própria aba do seu navegador, e nada do que você cola ou solta é enviado. HTML, SVG e scripts decodificados aparecem como texto, nunca são executados; uma imagem ou um PDF é mostrado pelo visualizador do próprio navegador. Abra a aba Rede das ferramentas de desenvolvedor do navegador enquanto usa: nenhuma requisição leva os seus dados.

Por que o Base64 é 33% maior que o original?

Porque cada três bytes viram quatro caracteres, e quatro dividido por três dá 1,33. Até dois caracteres de preenchimento = podem ser adicionados no final, e quebrar as linhas a cada 76 caracteres para e-mail acrescenta uma quebra de linha a cada linha, então uma string longa costuma ficar cerca de 35% maior que os bytes que carrega. Compressão como o gzip recupera a maior parte disso.

O que é Base64 seguro para URL?

É o Base64 com + trocado por - e / trocado por _, como define a RFC 4648 §5, para que o resultado possa ir numa URL, num nome de arquivo ou num cookie sem precisar de escape. O preenchimento costuma ser omitido também, como nos JSON Web Tokens. Esta ferramenta lê os dois alfabetos, mesmo misturados numa só string, e escreve em qualquer um deles.

Por que minha decodificação Base64 falha?

Quase sempre por causa de um caractere que não está no alfabeto Base64: reticências onde um app de chat cortou a string, uma aspa curva de um processador de texto ou um espaço sem quebra vindo de um PDF. Esta ferramenta diz qual é o caractere, mostra onde ele está com a posição, informa quanto foi decodificado sem erro antes dele e oferece removê-lo quando o que sobra ainda pode ser decodificado.

Dá para converter Base64 para imagem?

Sim. Cole a string, com ou sem um prefixo como data:image/png;base64,, e a imagem aparece com o formato, o tamanho e as dimensões reais em pixels, lidas do cabeçalho do próprio arquivo. Depois, baixe-a com a extensão certa. PNG, JPEG, GIF, WebP, BMP, ICO e AVIF têm prévia; um SVG aparece primeiro como texto, porque um SVG pode conter script.

O que significa o = no final do Base64?

Significa que o último grupo de três bytes ficou curto. Dois bytes restantes viram três caracteres e um =, e um byte restante vira dois caracteres e ==. O preenchimento não carrega dado algum: só diz ao decodificador onde os bytes terminam. Muitos decodificadores, incluindo este, também leem Base64 sem o preenchimento.

Existe limite de tamanho?

Um arquivo que você escolhe ou solta pode ter até 10 MB; um maior é recusado com o nome e o tamanho, nunca lido pela metade. O limite para texto colado é 14.349.002 caracteres: o suficiente para o Base64 de um arquivo de 10 MB com as quebras de linha, então tudo o que a ferramenta codifica pode ser decodificado de novo. Entradas grandes são lidas em segundo plano, e a digitação continua fluida.

Posso decodificar um JWT aqui?

Sim. Cole o token e o cabeçalho e o payload dele aparecem como JSON formatado, com as datas ao lado das claims iat e exp e a assinatura mostrada como bytes. Esta página só decodifica as três partes base64url: não verifica a assinatura e nunca diz que um token é válido, então não a use para decidir se pode confiar em um.

Sentiu falta de algo?Sugira um recurso ou uma nova ferramenta