Làm cách nào để giải mã chuỗi mã hóa base64?


258

Tôi đang cố gắng "giải mã" chuỗi Base64 sau đây:

Điều đó

Đây là những gì tôi biết về chính chuỗi:

  1. Chuỗi ban đầu được truyền qua mã sau:

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

    Phần p1trong mã được cho là chuỗi " _p0lizei.".

  2. Sau đó, nó được chuyển đổi thành chuỗi Base64 theo mã sau:

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

Câu hỏi là, làm thế nào để tôi giải mã chuỗi Base64 để tôi có thể tìm ra chuỗi gốc là gì?


1
Tôi biết "Tại sao" thường không liên quan khi hỗ trợ công cụ kế thừa, nhưng tôi cần biết ... Tại sao chuỗi gốc Base64 được mã hóa ở vị trí đầu tiên ?! ?? Base64 thường được sử dụng để chuyển đổi nhị phân thành phiên bản di động dựa trên văn bản để nhúng XML hoặc JSON - có thể để di chuyển qua lớp dịch vụ web, không phải để chuyển đổi chuỗi thành chuỗi được mã hóa.
barrypicker

@barry - để trả lời câu hỏi cũ của bạn trên một bài thậm chí cũ hơn ... Tôi đến đây bởi vì tôi cần để đối phó với HTTP header Authorization đòi hỏi mã hóa base64 chuỗi
freefaller

Câu trả lời:


646

Đơn giản:

byte[] data = Convert.FromBase64String(encodedString);
string decodedString = Encoding.UTF8.GetString(data);

18
Để hoàn thành câu trả lời này, Jerry Nixon có một bài viết tuyệt vời về điều này.
orad

4
và đừng quên thêm không gian tên 'bằng System.Text'
Eklavyaa

85

Các m000493phương pháp dường như thực hiện một số loại mã hóa XOR. Điều này có nghĩa là cùng một phương pháp có thể được sử dụng cho cả mã hóa và giải mã văn bản. Tất cả bạn phải làm là đảo ngược m0001cd:

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

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

với sự return m0001cd(builder3.ToString());thay đổi thành return builder3.ToString();.


Cảm ơn bạn, đây chỉ là câu trả lời tôi đang tìm kiếm. Tôi đã gần nhổ tóc: p
Rickard

48
@Rickard: Bạn có thể "chấp nhận" một câu trả lời giải quyết vấn đề của mình bằng cách nhấp vào dấu chọn bên cạnh câu trả lời ở bên trái.
dtb

3
Vui lòng không xem bất kỳ điều nào trong số này là "mã hóa" hoặc "giải mã". Làm cho nó một điểm để phân biệt giữa "mã hóa" và "mã hóa".
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.