Bagaimana cara mendekodekan string yang disandikan base64?

258

Saya mencoba "mendekode" string Base64 berikut ini:

OBFZDTcPCxlCKhdXCQ0kMQhKPh9uIgYIAQxALBtZAwUeOzcdcUEeW0dMO1kbPElWCV1ISFFKZ0kdWFlLAURPZhEFQVseXVtPOUUICVhMAzcfZ14AVEdIVVgfAUIBWVpOUlAeaUVMXFlKIy9rGUN0VF08Oz1POxFfTCcVFw1LMQNbBQYWAQ ==

Inilah yang saya tahu tentang string itu sendiri:

  1. String asli pertama kali dilewatkan melalui kode berikut:

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

    Bagian p1dalam kode seharusnya adalah string " _p0lizei.".

  2. Itu kemudian dikonversi ke string Base64 dengan kode berikut:

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

Pertanyaannya adalah, bagaimana cara saya mendekode string Base64 sehingga saya bisa mengetahui apa string aslinya?

Rickard
sumber
1
Saya tahu "Mengapa" umumnya tidak relevan ketika mendukung hal-hal warisan, tetapi saya harus tahu ... Mengapa string asli Base64 dikodekan di tempat pertama?! ?? Base64 biasanya digunakan untuk mengubah biner menjadi versi portabel berbasis teks untuk disematkan dalam XML atau JSON - mungkin untuk bergerak melintasi lapisan layanan web, bukan untuk mengubah string menjadi string yang disandikan.
barrypicker
@ barry - untuk menjawab pertanyaan lama Anda pada posting yang bahkan lebih tua ... Saya tiba di sini karena saya harus berurusan dengan Header Otorisasi HTTP yang memerlukan string yang dikodekan base64
freefaller

Jawaban:

646

Sederhana:

byte[] data = Convert.FromBase64String(encodedString);
string decodedString = Encoding.UTF8.GetString(data);
Matthew Abbott
sumber
18
Untuk melengkapi jawaban ini, Jerry Nixon memiliki posting bagus tentang ini.
orad
4
dan jangan lupa untuk menambahkan namespace 'using System.Text'
Eklavyaa
86

The m000493Metode tampaknya melakukan beberapa jenis enkripsi XOR. Ini berarti bahwa metode yang sama dapat digunakan untuk mengenkripsi dan mendekripsi teks. Yang harus Anda lakukan adalah membalikkan m0001cd:

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

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

dengan return m0001cd(builder3.ToString());diubah menjadi return builder3.ToString();.

dtb
sumber
Terima kasih, ini hanya jawaban yang saya cari. Saya hampir mencabut rambut saya: p
Rickard
48
@Rickard: Anda dapat "menerima" jawaban yang memecahkan masalah Anda dengan mengklik tanda centang di sebelah jawaban di sebelah kiri.
dtb
3
Harap jangan merujuk semua ini sebagai "enkripsi" atau "dekripsi". Jadikan itu sebagai titik untuk membedakan antara "enkripsi" dan "encoding".