python无效输出中的AES加密

时间:2017-08-15 17:23:52

标签: python encryption aes

我正在编写一个使用AES-256位加密的安全聊天程序,昨天我在AES中测试了不同的方法,其中以下工作,我的程序将允许用户设置加密密钥,程序将添加或者减去但是需要很多字符才能有32字节的密钥。现在当我昨天保存下面的代码时它工作了,但是,今天当我通过终端时我得到了这个无效的输出,但是当我从昨天运行程序时,它给了我正确的输出!!任何能够提供帮助的人都会很棒

>>> import Crypto
>>> from Crypto.Cipher import AES
>>> iv = 'xxxxxxxxxxxxxxxx'
>>> key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
>>> cipher = AES.new(key, AES.MODE_CFB, iv)
>>> cipher.encrypt('Hello')
'c\x0f\x81\xc4\xde'
>>> cipher.decrypt('c\x0f\x81\xc4\xde')
'\x88\xd4;YR'

1 个答案:

答案 0 :(得分:0)

这是因为重用AES状态和AES状态现在已经发生变异。您需要创建一个新状态:

Python 3.5.3 (default, Jan 19 2017, 14:11:04) 
>>> from Crypto.Cipher import AES
>>> iv = 'xxxxxxxxxxxxxxxx'
>>> iv = b'xxxxxxxxxxxxxxxx'
>>> key = b'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
>>> cipher = AES.new(key, AES.MODE_CFB, iv)
>>> cipher.encrypt('Hello')
b'c\x0f\x81\xc4\xde'
>>> cipher.decrypt(b'c\x0f\x81\xc4\xde')
b'\x88\xd4;YR'

不要重复使用状态,而是创建一个从IV初始化的新状态。

>>> cipher = AES.new(key, AES.MODE_CFB, iv)
>>> cipher.decrypt(b'c\x0f\x81\xc4\xde')
b'Hello'