2015-07-04 27 views
1

我試圖用c#中的密鑰解密異或字符串,但解密是錯誤的,我得到錯誤的值。在c#中異或解密#

string text = "xorhash"; 
string key = "xorkey"; 
var result = new StringBuilder(); 

    for (int c = 0; c < text.Length; c++) 
    result.Append((char)((uint)text[c]^(uint)key[c % key.Length])); 

    return result.ToString(); 

我已經從這個Python代碼中獲得了,它工作的很好。

def xor(message, key): 
    return "".join(chr(ord(message[i])^ord(key[i % len(key)])) for i in xrange(len(message))) 
key = "my_xor_key" 
message = "my_xor_hash".decode("hex") 
print xor(message, key) 
+0

輸出什麼是期待? –

+0

my_xor_hash^my_xor_key無法輸出你提供的任何值 –

+0

無論如何,你的問題是因爲python字符串是從十六進制表示解碼,但c#不這樣做 –

回答

2

只要你輸入的字符串實際上是代碼的十六進制表示,C#代碼應該是這樣的:

for (int c = 0; c < text.Length; c+=2) 
    result.Append((char)(Convert.ToUInt16(text.Substring(c, 2), 16)^(ushort)key[ (c/2) % key.Length])); 
+0

感謝男人!! :) 你的代碼正在工作 – JaneFarrow

1
private static string xor(string text, string key) { 
    var result = new StringBuilder(); 
    for (int c = 0; c < text.Length; c++) 
     result.Append((char)((uint)text[c]^(uint)key[c % key.Length])); 
    return result.ToString(); 
} 

string text = "my_xor_hash"; 
string key = "my_xor_key"; 
string encrypt = xor(text, key); 
string decrypt = xor(encrypt, key); 
System.Console.Write("Encrypt " + encrypt); 
System.Console.Write("Decrypt " + decrypt); 

打印:

Encrypt 
Decrypt my_xor_hash 

而且我沒有改變單行線,只能縮進。

編輯:

private static string xor(string text, string key) { 
    var result = new StringBuilder(); 
    for (int c = 0; c < text.Length; c++) 
     result.Append((char)((uint)text[c]^(uint)key[c % key.Length])); 
    return result.ToString(); 
} 

private static string FromHex(string hex) { 
    byte[] raw = new byte[hex.Length/2]; 
    for (int i = 0; i < raw.Length; i++) { 
     raw[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16); 
    } 
    return Encoding.ASCII.GetString(raw); 
} 

public static void Main() { 
    string text = FromHex("xor_hash"); 
    string key = "xor_key"; 
    string decrypt = xor(text, key); 
    System.Console.Write("Decrypt " + decrypt); 
} 

打印:

Decrypt HARPERS 
+0

謝謝男人爲你回覆 – JaneFarrow