Wie dekodiere ich eine Base64-codierte Zeichenfolge?

258

Ich versuche, diese folgende Base64-Zeichenfolge zu "dekodieren":

OBFZDTcPCxlCKhdXCQ0kMQhKPh9uIgYIAQxALBtZAwUeOzcdcUEeW0dMO1kbPElWCV1ISFFKZ0kdWFlLAURPZhEFQVseXVtPOUUICVhMAzcfZ14AVEdIVVgfAUIBWVpOUlAeaUVMXFlKIy9rGUN0VF08Oz1POxFfTCcVFw1LMQNbBQYWAQ ==

Folgendes weiß ich über die Zeichenfolge selbst:

  1. Die ursprüngliche Zeichenfolge wird zuerst durch den folgenden Code geleitet:

    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());
    }

    Der p1Teil im Code soll die Zeichenfolge " _p0lizei." sein.

  2. Es wird dann durch den folgenden Code in eine Base64-Zeichenfolge konvertiert:

    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;
    }

Die Frage ist, wie ich die Base64-Zeichenfolge dekodiere, damit ich herausfinden kann, was die ursprüngliche Zeichenfolge ist.

Rickard
quelle
1
Ich weiß, dass "Warum" bei der Unterstützung von Legacy-Inhalten im Allgemeinen irrelevant ist, aber ich muss wissen ... Warum wurde die ursprüngliche Zeichenfolge Base64 überhaupt codiert ?! ?? Base64 wird normalerweise zum Konvertieren von Binärdateien in eine textbasierte tragbare Version zum Einbetten in XML oder JSON verwendet - möglicherweise zum Verschieben über eine Webdienstschicht, nicht zum Konvertieren von Zeichenfolgen in codierte Zeichenfolgen.
Barrypicker
@barry - um deine alte Frage in einem noch älteren Beitrag zu beantworten ... Ich bin hierher gekommen, weil ich mich mit dem HTTP-Autorisierungsheader befassen muss, für den eine Base64-codierte Zeichenfolge erforderlich ist
Freefaller

Antworten:

646

Einfach:

byte[] data = Convert.FromBase64String(encodedString);
string decodedString = Encoding.UTF8.GetString(data);
Matthew Abbott
quelle
18
Um diese Antwort zu vervollständigen, hat Jerry Nixon einen großartigen Beitrag dazu.
Orad
4
und vergessen Sie nicht, den Namespace 'using System.Text'
hinzuzufügen
85

Die m000493Methode scheint eine Art XOR-Verschlüsselung durchzuführen. Dies bedeutet, dass dieselbe Methode sowohl zum Ver- als auch zum Entschlüsseln des Texts verwendet werden kann. Alles was Sie tun müssen, ist umgekehrt m0001cd:

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

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

mit return m0001cd(builder3.ToString());geändert zu return builder3.ToString();.

dtb
quelle
Danke, das war genau die Antwort, nach der ich gesucht habe. Ich war kurz davor, mir die Haare zu ziehen: p
Rickard
48
@ Rickard: Sie können eine Antwort "akzeptieren", die Ihr Problem löst, indem Sie auf das Häkchen neben der Antwort auf der linken Seite klicken.
dtb
3
Bitte bezeichnen Sie dies nicht als "Verschlüsselung" oder "Entschlüsselung". Machen Sie es sich zur Aufgabe, zwischen "Verschlüsselung" und "Kodierung" zu unterscheiden.