Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用同一密钥加密同一字符串的不同加密版本_Python_Pycrypto - Fatal编程技术网

Python 使用同一密钥加密同一字符串的不同加密版本

Python 使用同一密钥加密同一字符串的不同加密版本,python,pycrypto,Python,Pycrypto,这简直让我发疯 这就是发生的事情: 在python shell中: >>> from Crypto.Cipher import ARC4 >>> a = ARC4.new('0123456789123456') >>> b = ARC4.new('0123456789123456') >>> de = b.decrypt >>> en = a.encrypt >>> en('abcd')

这简直让我发疯

这就是发生的事情:

在python shell中:

>>> from Crypto.Cipher import ARC4
>>> a = ARC4.new('0123456789123456')
>>> b = ARC4.new('0123456789123456')
>>> de = b.decrypt
>>> en = a.encrypt
>>> en('abcd')
'\x18\x07\x8a\xdc'
>>> en('abcd')
'\x89>\xa0T'
>>> en('abcd')
'y\xe1-\xfe'
>>> en('abcd')
'\xc7\xf6\x19\xfc'
>>> 
我用相同的密钥加密了4次。这四次我都得到了不同的加密字符串

当我做下面的事情时(也许我会在解密上面所有不同的加密消息时得到相同的解密消息)

因此,我甚至一次也没有收到原始消息
abcd

为什么会发生这种情况

我如何克服这个问题

请帮我解决这个问题


我正在Linux Mint机器上使用pyCrypto库。

ACR4是一种流密码。它不会像您认为的那样加密。试试这个:

en("abcd" * 16)
看看会发生什么。结果将不是相同字节的16倍,而是与您在问题中尝试的结果相似

如果要加密到相同的字节,必须使用新的ACR4实例:


RC4是一种流密码,因此某些明文的加密形式取决于密码已加密的内容

>>> encrypted = [en('abcd') for i in range(4)]
>>> encrypted
['(h=\xd5', 'h \x8b\xe2', '\xa3\xb6\x16}', '\xe3\xb0\xda\xe3']
>>> decrypted = [de(x) for x in encrypted]
>>> decrypted
['abcd', 'abcd', 'abcd', 'abcd']
在进行加密/解密之前创建新的RC4对象,您将得到预期的结果:

>>> a = ARC4.new('0123456789123456')
>>> b = ARC4.new('0123456789123456')
>>> de = b.decrypt
>>> en = a.encrypt
>>> al  = []
>>> for i in range(10):
...   al.append(en('abcd'))
... 
>>> gl = []
>>> for i in range(10):
...   gl.append(de(al[i]))
... 
>>> gl
['abcd', 'abcd', 'abcd', 'abcd', 'abcd', 'abcd', 'abcd', 'abcd', 'abcd', 'abcd']
>>> encrypted = [en('abcd') for i in range(4)]
>>> encrypted
['(h=\xd5', 'h \x8b\xe2', '\xa3\xb6\x16}', '\xe3\xb0\xda\xe3']
>>> decrypted = [de(x) for x in encrypted]
>>> decrypted
['abcd', 'abcd', 'abcd', 'abcd']
>>> a = ARC4.new('0123456789123456')
>>> b = ARC4.new('0123456789123456')
>>> de = b.decrypt
>>> en = a.encrypt
>>> al  = []
>>> for i in range(10):
...   al.append(en('abcd'))
... 
>>> gl = []
>>> for i in range(10):
...   gl.append(de(al[i]))
... 
>>> gl
['abcd', 'abcd', 'abcd', 'abcd', 'abcd', 'abcd', 'abcd', 'abcd', 'abcd', 'abcd']