0

我在玩 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

我不明白为什么会这样。

您能否解释一下这里实际发生了什么,为什么会这样?

4

1 回答 1

1

PyCrypto 文档

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

问题是您将不得不重新初始化您的密码,或者 - 可能更好 - 为加密和解密构建单独的对象实例。

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))
于 2013-10-20T16:45:28.130 回答