Você tem que lidar com o formato Base64? Então esse site é perfeito para você! Use o nosso ferramenta online super útil para codificar ou decodificar os seus dados.

Decodificar do formato Base64

Para binários codificados (como imagens, documentos, etc.), use o formulário de carregar arquivo um pouco mais abaixo nessa página.

Decodificar arquivos do formato Base64

0 Clique (ou toque) aqui para selecionar um arquivo
O tamanho máximo do arquivo é 100MB.
Não execute arquivos decodificados de fontes não-confiáveis.
A decodificação de arquivos que contenham código malicioso ou conteúdo impróprio será bloqueada.
Trabalhando...
Espere até que o processo da decodificação for acabado, por favor.
Sucesso!
{{ output }} baixar o arquivo decodificado.
Observe que esse arquivo será deletado do nosso sistema logo depois da primeira tentativa de download ou 15 minutos de inatividade.
Erro!
{{ error }}

Visão geral

Base64 é uma metamorfose reversível, e esta ferramenta é a metade de volta da viagem: ela pega o texto imprimível que um codificador produziu e o transforma de volta no dado original. Cole uma cadeia de caracteres, escolha as configurações que combinam com a origem dela, e o resultado decodificado estará pronto para ler ou copiar. Quando a carga é um binário, como uma imagem ou um arquivo compactado, o texto Base64 dela mora num arquivo simples: o formulário de arquivo desta página recebe esse arquivo e devolve o binário original como download. O codificador correspondente mora no site irmão, a um clique de distância.

Opções avançadas

  • Conjunto de caracteres: O Base64 move bytes, não letras, então o resultado decodificado só se lê corretamente se você souber em qual conjunto de caracteres ele estava guardado antes da codificação. Escolha o que combina com a sua origem: UTF-8 para texto moderno, Windows-1252 ou uma variante ISO-8859 para documentos mais antigos, ou AUTO-DETECÇÃO para deixar a ferramenta decidir (ela mostra em que parou logo ao lado da lista, e assume UTF-8 quando não consegue distinguir). Se a saída parecer um alfabeto embaralhado, este é o primeiro ajuste a fazer. Arquivos ficam isentos: dados binários são decodificados como estão, sem nenhuma conversão aplicada.
  • Decodificar cada linha separadamente: Por padrão, a entrada inteira é uma única carga contínua: quebras de linha e espaços são removidos antes da decodificação, então uma cadeia de caracteres quebrada em várias linhas, copiada direto de um e-mail, funciona mesmo, e os caracteres seguros para URL - e _ são aceitos no lugar de + e /. Marque esta caixa quando a entrada for uma lista de itens independentes: cada linha é decodificada sozinha, e os resultados voltam um por linha. O formulário de arquivo oferece a mesma opção.
  • Modo ao vivo: Ative isso e a decodificação acontece no seu navegador enquanto você digita, reexecutando a cada tecla, sem enviar nada para os nossos servidores. Ele respeita a opção linha a linha e funciona apenas com UTF-8, então a lista de conjuntos de caracteres fica travada enquanto ele está ativo, e o botão de decodificar fica desativado até você desativá-lo.

Seguro e protegido

Tudo roda sobre uma conexão HTTPS criptografada, e nada do que você envia é guardado: os arquivos enviados são apagados no momento em que são processados, e o resultado disponível para download desaparece logo depois da sua primeira tentativa de download ou de 15 minutos de inatividade, o que acontecer primeiro. O conteúdo do que você envia nunca é armazenado; o único processamento além da conversão é uma varredura de segurança dos arquivos enviados, que existe para bloquear conteúdo malicioso ou inadequado. Com o modo ao vivo ativo, o seu texto nunca sai do navegador. Todos os detalhes estão na nossa política de privacidade, com link no rodapé abaixo.

Completamente gratuito

Tudo nesta página é gratuito - a lista completa de conjuntos de caracteres, o envio de arquivos e o modo ao vivo inclusos. Sem conta, sem software para instalar, sem pagamento: para uma tarefa tão pequena, é assim que deve ser.

Base64 explicado

Algum dado simplesmente não consegue viajar por um canal só de texto: uma foto, um arquivo compactado, um hash, um pedaço de binário que faria uma conexão de e-mail de 7 bits engasgar. O Base64 é o tradutor para momentos assim. Ele reescreve qualquer sequência de bytes como texto simples e imprimível, para que o dado possa ficar no corpo de um e-mail, num documento JSON, num arquivo XML ou numa URL e chegue exatamente como saiu. A tradução é totalmente reversível: cada byte volta, na mesma ordem, sem nada perdido pelo caminho.

O formato inteiro cabe numa única frase: três bytes entram, quatro caracteres saem. O preço é um resultado cerca de um terço maior que o original. A recompensa é uma cadeia de caracteres que parece texto, se comporta como texto e sobrevive a canais que destruiriam bytes crus. E vale fixar cedo o que o Base64 não é: não é criptografia, e não é compressão. É uma metamorfose reversível, e esse é o trabalho inteiro.

Por que 64, e por que esses caracteres

Um byte guarda 8 bits, mas os antigos canais de texto, o e-mail acima de tudo, só transportavam ASCII de 7 bits com segurança. O truque é escolher um alfabeto de caracteres imprimíveis que sobreviva a qualquer viagem dessas, e dimensioná-lo para que a matemática feche certinha. Com 64 caracteres, cada caractere codificado carrega exatamente 6 bits, e 24 é divisível tanto por 8 (o byte) quanto por 6 (o caractere): três bytes de entrada viram quatro caracteres de saída, sem resto. O nome é apenas a base daquela matemática de caracteres, como a base 10 dos nossos dígitos.

O alfabeto padrão são os 62 caracteres alfanuméricos, de A a Z, de a a z e de 0 a 9, com + e / como os dois últimos. A especificação acrescenta um 65.º caractere, =, que nem faz parte do alfabeto: ele só aparece no final, como preenchimento. A escolha foi deliberada. O conjunto inteiro é imprimível; é comum a todos os sistemas de texto; e a especificação MIME observa que ele é grafado de forma idêntica em todas as versões do ISO 646, incluindo a US-ASCII, e em todas as versões do EBCDIC. Essa última propriedade é o que mantém o dado intacto enquanto ele atravessa a antiga engrenagem da internet, não limpa para 8 bits.

Valor Caractere Valor Caractere Valor Caractere Valor Caractere
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 I 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /
(O 65.º caractere, =, é o preenchimento: ele nunca carrega dados; só marca o fim.)

A codificação, passo a passo

O codificador é uma linha de montagem de quatro etapas. Ele lê a entrada três bytes por vez e funde cada trio numa única cadeia de 24 bits. Essa cadeia é cortada em quatro pedaços de 6 bits. Cada pedaço é um número de 0 a 63, e cada número é procurado na tabela acima. Quatro números entram, quatro caracteres saem.

Veja isso acontecer com a palavra foo, que chega com os valores de byte 102, 111 e 111 (hexadecimal 66, 6F, 6F). Colocados um atrás do outro, os 24 bits são 01100110 01101111 01101111. Cortados em grupos de seis, isso dá 011001, 100110, 111101 e 101111, que são 25, 38, 61 e 47. A tabela diz que esses são Z, m, 9 e v, então foo codifica para Zm9v, e qualquer decodificador Base64 do mundo vai devolvê-la aos três bytes originais.

Etapa 1.º byte 2.º byte 3.º byte
Texto f o o
Valor do byte 102 111 111
Hex 66 6F 6F
Bits 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1
Valor de 6 bits 25 38 61 47
Caractere Z m 9 v

O resto da entrada é processado do mesmo jeito, trio após trio, até não sobrar nada. Só o grupo final, quando guarda menos de três bytes, precisa de uma manobra especial.

Preenchimento: o = no final

A entrada é sempre um número inteiro de bytes, mas três nem sempre a divide certinho. Quando sobram um ou dois bytes na cauda, o codificador ainda precisa fechar um grupo completo de quatro caracteres. Ele enche os bits faltantes com zeros, faz as buscas como de costume e substitui os caracteres que os bits de preenchimento teriam produzido por sinais =. São exatamente três finais possíveis:

Cauda da entrada Cauda codificada Decodifica de volta para
3 bytes 4 caracteres, sem preenchimento 3 bytes
2 bytes 3 caracteres + 1 = 2 bytes
1 byte 2 caracteres + 2 = 1 byte

Então fo, dois bytes, vira Zm8=, e o solitário f vira Zg==, enquanto foo não precisa de preenchimento nenhum. O decodificador sabe exatamente o que fazer com os preenchimentos: cada = significa mais oito bits de zero para descartar. Os sinais de preenchimento ficam sempre só no final, e há no máximo dois deles. A especificação MIME até usa isso como um recurso: como = não pode aparecer em outro lugar, uma carga com preenchimento anuncia o próprio fim, e o receptor pode ver que o dado não foi cortado em trânsito. E para o caso mais pequeno: a entrada vazia codifica para a saída vazia. Até o nada faz uma ida e volta perfeita.

A decodificação: a linha de montagem ao contrário

Decodificar é a mesma máquina rodando ao contrário, e é igualmente mecânica. Pegue quatro caracteres, procure os de verdade (um preenchimento substitui seis zeros), escreva os 24 bits e devolva os primeiros 16 bits se houver um preenchimento, ou os 24 todos se não houver nenhum. Quatro caracteres entram, três bytes saem; dois bytes saem com um preenchimento; um byte sai com dois. Os bits de zero que o codificador acrescentou são a única coisa descartada, e todo o resto dos bits é exatamente o que entrou. É isso que reversível realmente significa aqui: o formato em si é sem perdas, e as únicas coisas que podem machucar o seu dado são um canal que corrompe a cadeia de caracteres, ou um decodificador que desiste em silêncio.

É por isso que o padrão é rigoroso sobre uma coisa: caracteres que não estão no alfabeto. O RFC 4648 diz que um decodificador deve rejeitar uma carga que contenha qualquer caractere fora dos 64, a menos que a especificação ao redor permita isso explicitamente. A razão é prática, não pedante. Um decodificador que engole caracteres estranhos em silêncio pode ser enganado: os caracteres contrabandeados viram um canal lateral escondido, e esse truque já foi usado para esconder dados de filtros e para cutucar as falhas de decodificadores. A famosa exceção é o próprio MIME, que antecede o padrão e diz o oposto: ignore todos os caracteres fora do alfabeto, e é assim que as quebras de linha passam num anexo de e-mail. Quando você mesmo valida a entrada, a regra moderna é a certa: se a sua cadeia de caracteres traz um @, um espaço ou qualquer outra coisa que não está na tabela, não é Base64 limpo.

Quebras de linha e a regra dos 76 caracteres

Você vai encontrar Base64 quebrado em linhas com frequência, e o hábito vem do e-mail. A antiga engrenagem do SMTP tinha limites de tamanho de linha, então o MIME quebra a carga a cada 76 caracteres por linha, com uma quebra CRLF, e o formato PEM, mais antigo, o que carrega certificados e chaves, quebra a cada 64. A regra do RFC 4648 para código novo é o oposto: não adicione quebras de linha nenhuma, a menos que o formato que você está implementando diga para adicionar. Na prática, o decodificador não se importa. Uma quebra de linha é só um caractere fora do alfabeto, então uma carga quebrada pelo MIME, um bloco PEM e uma longa cadeia de caracteres sem quebras todas decodificam para os mesmos bytes. Se você cola Base64 de algum lugar, remova as quebras de linha primeiro e pronto.

A quebra em linhas tem um pequeno custo, e ele aparece na conta de tamanho. Sem quebras de linha, o Base64 é exatamente quatro terços do original, cerca de 33 por cento maior. Quebrado a cada 76 caracteres, com quebras CRLF, ele fica cerca de 37 por cento maior, que é por isso que um arquivo que deveria ter 100 KB chega muitas vezes como uns 137 KB de texto. A conta sempre fecha.

Base64URL: o gêmeo seguro para URLs

O alfabeto padrão tem dois caracteres que não combinam com URLs. Um + numa cadeia de consulta é lido tradicionalmente como um espaço, e / é um separador de caminho, então uma cadeia Base64 crua numa URL precisa de codificação por porcentagem para os dois, além dos preenchimentos =. A seção 5 do RFC 4648 define o conserto: o alfabeto seguro para URL e nome de arquivo, onde + vira - e / vira _. Os preenchimentos geralmente somem também, porque um preenchimento faltante pode ser calculado pelo comprimento. O RFC diz sem rodeios que isso não deve ser chamado de Base64 puro: é uma codificação diferente, geralmente escrita como base64url.

Na prática, os dois ficam a uma troca de distância, na direção perigosa. Mande uma cadeia base64url para um decodificador padrão e dá errado, porque - e _ não estão no alfabeto padrão: um decodificador tolerante os descarta e devolve uma cadeia de bytes mais curta e errada, ou, quando o resto é curto demais para ficar sozinho, um erro, enquanto um rigoroso rejeita a carga inteira. A dança certa é trocar - de volta para + e _ de volta para /, completar os preenchimentos faltantes e só então decodificar. É o dialeto que você encontra em JSON Web Tokens (JWT), nas cadeias de estado do OAuth e nos IDs de um certo site de vídeos bem grande.

Um guia rápido de campo

Antes de recorrer a uma ferramenta, você consegue ler boa parte da cadeia de caracteres você mesmo. Alguns testes dizem se uma carga é Base64 de alguma forma, e o que ela esconde:

  • Olhe para os caracteres. O Base64 padrão usa apenas de A a Z, de a a z, de 0 a 9, + e /; o gêmeo seguro para URLs usa - e _ no lugar desses dois. Qualquer outro símbolo, ou um espaço solto, significa que não é Base64 limpo.
  • Verifique os preenchimentos. Os sinais =, se existirem, ficam só no final, e há no máximo dois. Um preenchimento no meio da cadeia de caracteres é um sinal de alerta.
  • Conte o comprimento. Com preenchimentos, o comprimento é sempre um múltiplo de 4. Sem preenchimentos, dividir o comprimento por 4 deixa resto 0, 2 ou 3. Um resto de 1 é impossível, porque um único caractere só carrega 6 bits e um byte precisa de 8.
  • Estime o tamanho. Cada grupo de 4 caracteres guarda 3 bytes, menos um byte por sinal =. Então Zm9vYmFy, oito caracteres sem preenchimentos, são 6 bytes, e Zm9vYg==, oito caracteres com dois preenchimentos, são 4.

Um último truque de campo, e o mais útil. O codificador precisa zerar os bits de preenchimento, mas um decodificador tolerante não os confere. A carga Zg== decodifica para o único byte f, e a Zh== também: os bits baixos do último caractere são preenchimento nos dois casos, então ambos formam o mesmo byte. O padrão chama a versão com bits de zero de forma canônica, e ela permite que decodificadores rigorosos rejeitem a outra. Duas cadeias de caracteres, uma carga. Se dois sistemas discordam sobre um valor Base64, os bits de preenchimento são um bom lugar para começar a procurar.

O que o Base64 não é

  • Não é criptografia. Não há chave nem segredo; qualquer um devolve uma cadeia Base64 em bytes num segundo. O RFC até menciona incidentes reais em que pessoas relataram trocas de protocolo que incluíam uma senha "codificada", convencidas de que a codificação a escondia. Se o dado é sensível, proteja-o com criptografia de verdade antes de codificá-lo, não depois.
  • Não é compressão. Vai na direção oposta: o resultado é cerca de 33 por cento maior que a entrada, e ainda maior quando as quebras de linha entram. O Base64 compra segurança de texto para você, e cobra por isso em tamanho.
  • Não é um conjunto de caracteres. O Base64 move bytes, não letras. Ele não sabe nem se importa se aqueles bytes são texto UTF-8, uma codificação antiga de um byte, ou um JPEG. A pergunta "qual conjunto de caracteres é este?" vive antes da codificação e depois da decodificação, nunca dentro dela.
  • Não é uma codificação única. O nome cobre uma família: o alfabeto padrão, o gêmeo seguro para URLs, cargas quebradas a cada 76 ou 64 caracteres, variantes que pulam os preenchimentos e um punhado de exóticos (o IMAP, por exemplo, usa uma vírgula no lugar do / do alfabeto ao codificar nomes de caixas postais internacionais). Quando dois sistemas discordam sobre uma carga, a diferença de dialeto é geralmente a culpada.

A letra miúda

As fontes primárias são curtas e legíveis. O RFC 4648, As codificações de dados Base16, Base32 e Base64 (2006), é o padrão atual: os dois alfabetos, as regras de preenchimento e quebra de linha, as regras de rigor, e um conjunto de vetores de teste oficiais, como foo virando Zm9v, contra os quais as implementações se conferem. Atrás dele está o RFC 2045, a especificação MIME de 1996, de onde vêm a regra da linha de 76 caracteres e a tolerância de ignorar caracteres estranhos, e o RFC 1421, a especificação descontinuada de Privacy Enhanced Mail que começou a família com linhas de 64 caracteres. Uma tentativa de unificação anterior, o RFC 3548, foi substituída pelo RFC 4648.

Essa é a história inteira: 64 caracteres, três bytes entram e quatro caracteres saem, = para fechar a cauda, e uma ida e volta perfeita. Toda ferramenta, biblioteca e conversor online que você encontrar é apenas uma porta de entrada para isso. Quando você conseguir olhar para uma cadeia Base64 e ver os bytes parados atrás dela, nada no formato vai te surpreender de novo. E quando você estiver pronto para escrever o decodificador você mesmo, os artigos de linguagens de programação logo abaixo desta seção entregam os mesmos 64 caracteres como código que funciona: um guia completo por linguagem.