PyCrypto Decryption Ciphertext不会产生明文

时间:2013-10-19 08:22:10

标签: python-2.7 aes des pycrypto

我正在玩PyCrypto的AES和DES实现。每次,我都解密了一个密文,我用纯文本加密,它发出随机字符串。

我尝试了以下内容:

from Crypto.Cipher import AES,DES
from Crypto import Random

iv_AES = Random.new().read(AES.block_size)
iv_DES = Random.get_random_bytes(8)

key_AES = 'abcdefghijklmnop'
key_DES = 'abcdefgh'

aes = AES.new(key_AES,AES.MODE_CFB,iv_AES)
aes1 = AES.new(key_AES,AES.MODE_CFB,iv_AES)
des = DES.new(key_DES,DES.MODE_CFB,iv_DES)
des1 = DES.new(key_DES,DES.MODE_CFB,iv_DES)

plaintext = 'Hello! World'

print plaintext == aes.decrypt(aes.encrypt(plaintext))
print plaintext == des.decrypt(des.encrypt(plaintext))
print plaintext == aes1.decrypt(aes.encrypt(plaintext))
print plaintext == des1.decrypt(des.encrypt(plaintext))

结果:

False
False
True
True

我不明白为什么会这样。

请你解释一下这里发生了什么,为什么会这样?

1 个答案:

答案 0 :(得分:1)

来自PyCrypto documentation

  

这也意味着您无法使用相同的密钥重用对象来加密或解密其他数据。

问题在于您必须重新初始化您的密码,或者 - 可能更好 - 构建用于加密和解密的单独对象实例。

from Crypto.Cipher import AES,DES
from Crypto import Random

iv_AES = Random.new().read(AES.block_size)
iv_DES = Random.get_random_bytes(8)

key_AES = 'abcdefghijklmnop'
key_DES = 'abcdefgh'

aese = AES.new(key_AES,AES.MODE_CFB,iv_AES)
aesd = AES.new(key_AES,AES.MODE_CFB,iv_AES)
dese = DES.new(key_DES,DES.MODE_CFB,iv_DES)
desd = DES.new(key_DES,DES.MODE_CFB,iv_DES)

plaintext = 'Hello! World'

print plaintext == aesd.decrypt(aese.encrypt(plaintext))
print plaintext == desd.decrypt(dese.encrypt(plaintext))