Python 2.x和3.x RC4加密

时间:2017-10-27 20:39:01

标签: python encryption

我尝试在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),但没有骰子。任何人都有任何想法,为什么这是使用相同的密钥和明文输出不同的数据?我的目标是拥有一个可以传递的字符串。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

找出解决方案。在此处发布了此功能:https://gist.github.com/t3ntman/201e439bc7818a25af236cac6b3eacc6