如何使用十六进制值解密RC4?

时间:2014-09-19 03:48:42

标签: python encryption

我在网上找到了几个用于python的RC4脚本。我使用了http://www.joonis.de/en/code/rc4-algorithm中的一个,我将其简化为仅用于解密使用带有40byte密钥的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

1 个答案:

答案 0 :(得分:1)

根据您粘贴的算法http://www.joonis.de/en/code/rc4-algorithm,错误在以下3行中:

for char in data:
    i = 0
    j = 0

应该是:

i = 0
j = 0
for char in data: