我在网上找到了几个python的RC4脚本。我使用了我简化的http://www.joonis.de/en/code/rc4-algorithm中的一个,仅用于解密使用RC4用40byte密钥加密的文件。

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/,但是当我通过脚本进行操作时,输出错误。

我有点不知道问题可能出在哪里。如果有人可以告诉我我在做什么错,我将不胜感激!

我想说的是,我可能需要找出如何对算法进行编码以使其与十六进制值和整数一起工作,但是似乎python已经具有十六进制了。我不太确定。

链接到测试文件= http://bayfiles.net/file/1kPgD/bVuyGw/input.xml

最佳答案

根据您粘贴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:

10-08 07:07