2011-08-20 61 views
153

我試圖 「解碼」 這下面的Base64字符串:如何解碼base64編碼的字符串?

OBFZDTcPCxlCKhdXCQ0kMQhKPh9uIgYIAQxALBtZAwUeOzcdcUEeW0dMO1kbPElWCV1ISFFKZ0kdWFlLAURPZhEFQVseXVtPOUUICVhMAzcfZ14AVEdIVVgfAUIBWVpOUlAeaUVMXFlKIy9rGUN0VF08Oz1POxFfTCcVFw1LMQNbBQYWAQ ==

這是我知道的字符串本身:

  1. 原始字符串首先通過以下代碼:

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

    代碼中的p1部分應該是字符串「_p0lizei.」。

  2. 然後它被下面的代碼轉換爲Base64編碼字符串:

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

的問題是,我該如何解碼Base64編碼字符串,這樣我可以找出原始字符串是什麼?

+0

我知道「爲什麼」在支持遺留的東西時通常是不相關的,但我需要知道......爲什麼原始字符串Base64編碼在第一位呢? Base64通常用於將二進制轉換爲基於文本的可移植版本,以便嵌入到XML或JSON中 - 可能需要跨Web服務層進行移動,而不是將字符串轉換爲編碼字符串。 – barrypicker

回答

422

簡單:

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

爲了完成這個答案,傑里尼克鬆在這方面有一個[偉大的職位](http://blog.jerrynixon.com/2014/11/reading-and-writing-base64-in-windows.html)。 – orad

51

m000493方法似乎是執行某種XOR加密。這意味着相同的方法可以用於加密和解密文本。所有你需要做的是相反的m0001cd

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

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

return m0001cd(builder3.ToString());改爲return builder3.ToString();

+0

謝謝,這只是我正在尋找的答案。 我正在拉我的頭髮:p – Rickard

+31

@Rickard:您可以通過點擊左側答案旁邊的複選標記來「接受」解答您的問題的答案。 – dtb

+2

請接受它,它已經5年半了! – Mardoxx