Ir para o conteúdo
DeepBase64

Porque é que o meu base64 descodificado parece lixo?

Descodificou alguma coisa e obteve uma fila de caracteres sem sentido, pontos de interrogação ou símbolos de substituição. Há duas razões bastante diferentes para isso, e pedem respostas opostas, por isso vale a pena saber qual está a ver.

A primeira é que a sua entrada nunca foi base64. O alfabeto do base64 são letras, dígitos, mais e barra, o que significa que imenso texto vulgar passa por base64 válido só pela forma. Um resumo hexadecimal, um UUID sem hífenes, um hash de commit do git e palavras inglesas simples como "test" ou "Password" passam qualquer verificação de caracteres. Descodificá-las é uma operação legítima que produz bytes que nunca foram texto, por isso o resultado é ruído. O descodificador não falhou: respondeu a uma pergunta que não queria fazer.

A segunda é que a entrada era mesmo base64 e a carga simplesmente não é texto. O base64 existe para levar bytes arbitrários por canais que só aceitam caracteres, e esses bytes são muitas vezes uma imagem, um arquivo comprimido, um certificado, uma mensagem protobuf ou um bloco cifrado. A descodificação correu perfeitamente. O que saiu nunca foi feito para ser lido como letras.

Costuma distinguir-se pelos primeiros bytes do resultado. Um PNG começa com as letras PNG a seguir a um byte não imprimível; um fluxo gzip começa com dois bytes fixos; um PDF traz uma marca visível no início; um certificado em forma DER começa com um byte de estrutura e não com algo legível. Se a saída começa com uma assinatura reconhecível, tem dados reais num formato e não uma descodificação falhada.

A outra prova é a reversibilidade. Volte a codificar o resultado e compare-o com aquilo de que partiu. O base64 genuíno dá a volta exacto. Um valor que apenas tinha forma de base64 normalmente não, porque o seu comprimento ou o seu enchimento nunca saíram de um codificador.

Isto importa sobretudo em ferramentas que descodificam repetidamente. Uma que continue a retirar camadas enquanto a entrada ainda parecer descodificável acabará por destruir um valor perfeitamente bom ao descodificá-lo uma vez a mais, e anunciará um número de camadas que inclui uma que nunca existiu. Parar no ponto certo, e dizer porquê, é a parte verdadeiramente difícil.

Abrir o descodificador