2011-08-20 13 views
153

Tôi cố gắng để "giải mã" này chuỗi Base64 sau:Làm cách nào để giải mã chuỗi mã hóa base64?

OBFZDTcPCxlCKhdXCQ0kMQhKPh9uIgYIAQxALBtZAwUeOzcdcUEeW0dMO1kbPElWCV1ISFFKZ0kdWFlLAURPZhEFQVseXVtPOUUICVhMAzcfZ14AVEdIVVgfAUIBWVpOUlAeaUVMXFlKIy9rGUN0VF08Oz1POxFfTCcVFw1LMQNbBQYWAQ ==

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

  1. Chuỗi ban đầu là đầu tiên được chuyển qua đoạn 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 p1 trong mã được coi là chuỗi "_p0lizei.".

  2. Sau đó nó được chuyển thành một chuỗi Base64 bằng đoạn 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 đặt ra là, làm thế nào để giải mã các chuỗi Base64 để tôi có thể tìm ra những chuỗi ban đầu là ?

+0

Tôi biết "Tại sao" thường không liên quan khi hỗ trợ công cụ cũ, nhưng tôi cần phải 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 một phiên bản dựa trên văn bản di động để nhúng trong XML hoặc JSON - có thể di chuyển trên một lớp dịch vụ web, không phải để chuyển đổi chuỗi thành chuỗi được mã hóa. – barrypicker

Trả lời

422

đơn giản:

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

Để hoàn thành câu trả lời này, Jerry Nixon có [bài đăng tuyệt vời] (http://blog.jerrynixon.com/2014/11/reading-and-writing-base64-in-windows.html) về vấn đề này. – orad

51

Phương pháp m000493 dường như thực hiện một số loại mã hóa XOR. Điều này có nghĩa rằng 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à ngược m0001cd:

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

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

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

+0

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

+31

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

+2

Hãy chấp nhận nó, đã 5 năm rưỡi! – Mardoxx