Como decodificar uma string codificada em base64?

258

Estou tentando "decodificar" esta seguinte seqüência Base64:

OBFZDTcPCxlCKhdXCQ0kMQhKPh9uIgYIAQxALBtZAwUeOzcdcUEeW0dMO1kbPElWCV1ISFFKZ0kdWFlLAURPZhEFQVseXVtPOUUICVhMAzcfZ14AVEdIVVgfAUIBWVpOUlAeaUVMXFlKIy9rGUN0VF08Oz1POxFfTCcVFw1LMQNbBQYWAQ ==

Isto é o que eu sei sobre a própria string:

  1. A cadeia original é passada primeiro pelo seguinte código:

    private static string m000493(string p0, string p1)
    {
        StringBuilder builder = new StringBuilder(p0);
        StringBuilder builder2 = new StringBuilder(p1);
        StringBuilder builder3 = new StringBuilder(p0.Length);
        int num = 0;
    Label_0084:
        while (num < builder.Length)
        {
            int num2 = 0;
            while (num2 < p1.Length)
            {
                if ((num == builder.Length) || (num2 == builder2.Length))
                {
                    MessageBox.Show("EH?");
                    goto Label_0084;
                }
                char ch = builder[num];
                char ch2 = builder2[num2];
                ch = (char)(ch ^ ch2);
                builder3.Append(ch);
                num2++;
                num++;
            }
        }
        return m0001cd(builder3.ToString());
    }

    A p1parte do código deve ser a sequência " _p0lizei.".

  2. Em seguida, é convertido em uma seqüência de caracteres Base64 pelo seguinte código:

    private static string m0001cd(string p0)
    {
        string str2;
        try
        {
            byte[] buffer = new byte[p0.Length];
            str2 = Convert.ToBase64String(Encoding.UTF8.GetBytes(p0));
        }
        catch (Exception exception)
        {
            throw new Exception("Error in base64Encode" + exception.Message);
        }
        return str2;
    }

A questão é: como decodificar a string Base64 para descobrir qual é a string original?

Rickard
fonte
1
Eu sei que "Por que" geralmente é irrelevante ao suportar coisas herdadas, mas eu preciso saber ... Por que a string original Base64 foi codificada em primeiro lugar?! ?? O Base64 geralmente é usado para converter o binário em uma versão portátil baseada em texto para incorporação em XML ou JSON - possivelmente para se mover através de uma camada de serviço da Web, não para converter uma string em uma string codificada.
barrypicker
@ barry - para responder sua pergunta antiga em um post ainda mais antigo ... cheguei aqui porque preciso lidar com o cabeçalho de autorização HTTP que requer uma string codificada em base64
freefaller

Respostas:

646

Simples:

byte[] data = Convert.FromBase64String(encodedString);
string decodedString = Encoding.UTF8.GetString(data);
Matthew Abbott
fonte
18
Para completar esta resposta, Jerry Nixon tem um ótimo post sobre isso.
orad
4
e não se esqueça de adicionar espaço para nome 'usando System.Text'
Eklavyaa
86

O m000493método parece executar algum tipo de criptografia XOR. Isso significa que o mesmo método pode ser usado para criptografar e descriptografar o texto. Tudo o que você precisa fazer é reverter m0001cd:

string p0 = Encoding.UTF8.GetString(Convert.FromBase64String("OBFZDT..."));

string result = m000493(p0, "_p0lizei.");
//    result == "gaia^unplugged^Ta..."

com return m0001cd(builder3.ToString());alterado para return builder3.ToString();.

dtb
fonte
Obrigado, esta foi apenas a resposta que eu estava procurando. Eu estava perto de puxar meu cabelo: p
Rickard
48
@ Rickard: Você pode "aceitar" uma resposta que resolva seu problema clicando na marca de seleção ao lado da resposta no lado esquerdo.
DTB
3
Por favor, não se refira a nada disso como "criptografia" ou "descriptografia". Faça questão de distinguir entre "criptografia" e "codificação".