2014-09-19 124 views
1

我在python上找到了幾個RC4腳本。我使用了http://www.joonis.de/en/code/rc4-algorithm中的一個,我簡化了它,僅用於解密使用40byte密鑰用RC4加密的文件。如何使用十六進制值解密RC4?

testFile = 'input.xml' 

key = 'Utood9dRzY2ugHYi9jl9ug2UNytIIxjk6Ptouaig' 

out=file('output.xml','wb') 

with open (testFile, "rb") as f: 
    data = f.read() 
    S = range(256) 
    j = 0 

    for i in range(256): 
     j = (j + S[i] + ord(key[i % len(key)])) % 256 
     S[i] , S[j] = S[j] , S[i] 

    for char in data: 
     i = 0 
     j = 0  
     i = (i + 1) % 256 
     j = (j + S[i]) % 256 
     S[i] , S[j] = S[j] , S[i] 
     out.write(chr(ord(char)^S[(S[i] + S[j]) % 256])) 

out.close() 

我知道結果應該是什麼,因爲我已經成功解密了的input.xml文件@http://rc4.online-domain-tools.com/但是當我做它通過腳本的輸出是錯誤的。

我有點不知所措。如果有人能告訴我我做錯了什麼,我會非常感謝!

我想說我可能需要找出如何編碼算法來處理十六進制值與整數,但它似乎pythons已經有它的十六進制。但我不太確定。

鏈接TESTFILE = http://bayfiles.net/file/1kPgD/bVuyGw/input.xml

+0

這關鍵是Base64編碼。在做任何解密之前,您需要解碼它。 – roippi 2014-09-19 04:17:22

+0

其實它沒有編碼。我已經測試過了。 – clrx 2014-09-19 08:41:17

回答