我尝试在Python 2.x和3.x中实现RC4加密,但以下代码根据运行的Python版本输出不同的加密字符串。
def crypt(key, data):
S = list(range(256))
j = 0
for i in list(range(256)):
j = (j + S[i] + ord(key[i % len(key)])) % 256
S[i], S[j] = S[j], S[i]
j = 0
y = 0
out = []
for char in data:
j = (j + 1) % 256
y = (y + S[j]) % 256
S[j], S[y] = S[y], S[j]
out.append(chr(ord(char) ^ S[(S[j] + S[y]) % 256]))
return ''.join(out)
if __name__ == '__main__':
key = '123456' # proof of concept
plain = 'this is test data' # proof of concept
encrypted = crypt(key, plain)
print('Encrypted: \n' + encrypted)
使用Python 2.x输出:
Encrypted:
t?Zf?
RQ??Z ??
使用Python 3.x输出:
Encrypted:
tZf¼
RQÂÙZ º
我首先认为这是一个编码问题,并使用它(ASCII和UTF-8),但没有骰子。任何人都有任何想法,为什么这是使用相同的密钥和明文输出不同的数据?我的目标是拥有一个可以传递的字符串。非常感谢任何帮助!
答案 0 :(得分:0)
找出解决方案。在此处发布了此功能:https://gist.github.com/t3ntman/201e439bc7818a25af236cac6b3eacc6