【发布时间】:2014-09-19 03:48:41
【问题描述】:
我在网上找到了几个用于 python 的 RC4 脚本。我使用了来自http://www.joonis.de/en/code/rc4-algorithm 的一个,我简化了它,仅用于解密已使用 RC4 和 40 字节密钥加密的文件。
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 已经拥有它的十六进制。不过我不太确定。
【问题讨论】:
-
该密钥是 base64 编码的。您需要在进行任何解密之前对其进行解码。
-
其实没有编码。我已经测试过了。
标签: python encryption