为什么Pycrypto AES解密在使用用于加密的AES对象解密时提供不同的输出,在使用仅用于解密的AES对象解密时输出正确?
from Crypto.Cipher import AES
obj = AES.new('0123456789012345', AES.MODE_CBC, '0123456789012345')
message = '0123456789012345'
ciphertext = obj.encrypt(message)
plaintext = obj.decrypt(ciphertext)
# plaintext here is byte array
obj2 = AES.new('0123456789012345', AES.MODE_CBC, '0123456789012345')
plaintext = obj2.decrypt(ciphertext)
# plaintext here is 0123456789012345
答案 0 :(得分:5)
根据导出AES类的BlockAlgo#encrypt
:
使用密钥和初始化时设置的参数加密数据。
密码对象有状态;可以在两次或多次加密()调用中分解长数据块的加密。也就是说,声明:
glBegin
总是等同于:
c.encrypt(a) + c.encrypt(b)
这也意味着您无法重复使用对象来加密或解密具有相同密钥的其他数据。
所以你的问题实际上直接记录在课堂上。