Jak zdekodować ciąg zakodowany w standardzie base64?

258

Próbuję „zdekodować” ten następujący ciąg Base64:

OBFZDTcPCxlCKhdXCQ0kMQhKPh9uIgYIAQxALBtZAwUeOzcdcUEeW0dMO1kbPElWCV1ISFFKZ0kdWFlLAURPZhEFQVseXVtPOUUICVhMAzcfZ14AVEdIVVgfAUIBWVpOUlAeaUVMXFlKIy9rGUN0VF08Oz1POxFfTCcVFw1LMQNbBQYWAQ ==

Oto, co wiem o samym ciągu:

  1. Oryginalny ciąg jest najpierw przekazywany przez następujący kod:

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

    p1Część w kodzie ma być napis „ _p0lizei.”.

  2. Następnie jest konwertowany na ciąg Base64 za pomocą następującego kodu:

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

Pytanie brzmi: jak zdekodować ciąg Base64, aby dowiedzieć się, jaki jest oryginalny ciąg?

Rickard
źródło
1
Wiem, że „Dlaczego” jest generalnie nieistotne przy wspieraniu starszych treści, ale muszę wiedzieć… Dlaczego pierwotny ciąg Base64 został zakodowany w pierwszej kolejności?! ?? Base64 jest zwykle używany do konwersji pliku binarnego na tekstową wersję przenośną do osadzenia w XML lub JSON - być może do przejścia przez warstwę usług internetowych, a nie do konwersji łańcucha na kodowany.
barrypicker
@barry - aby odpowiedzieć na twoje stare pytanie w jeszcze starszym poście ... Dostałem się tutaj, ponieważ muszę poradzić sobie z nagłówkiem autoryzacji HTTP, który wymaga łańcucha zakodowanego w base64
freefaller

Odpowiedzi:

646

Prosty:

byte[] data = Convert.FromBase64String(encodedString);
string decodedString = Encoding.UTF8.GetString(data);
Matthew Abbott
źródło
18
Aby wypełnić tę odpowiedź, Jerry Nixon ma świetny post na ten temat.
orad
4
i nie zapomnij dodać przestrzeni nazw „using System.Text”
Eklavyaa
85

m000493Metoda wydaje się wykonać jakieś szyfrowanie XOR. Oznacza to, że ta sama metoda może być używana zarówno do szyfrowania, jak i deszyfrowania tekstu. Wszystko, co musisz zrobić, to odwrócić m0001cd:

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

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

ze return m0001cd(builder3.ToString());zmienionym na return builder3.ToString();.

dtb
źródło
Dziękuję, to była właśnie odpowiedź, której szukałem. Byłem bliski wyciągania włosów: p
Rickard,
48
@ Rickard: Możesz „zaakceptować” odpowiedź, która rozwiązuje problem, klikając znacznik wyboru obok odpowiedzi po lewej stronie.
dtb,
3
Nie należy nazywać tego „szyfrowaniem” ani „deszyfrowaniem”. Postaraj się odróżnić „szyfrowanie” od „kodowania”.