今天在练习爬虫的一个案例中需要用到aes进行加解密,但在解密中出现问题
代码其他部分都没有问题,但不知道为什么每次循环只有第一次解密成功,第二次解密出来的数据就出现错误,更改循环的起始值也是一样的问题
后来将代码更改,将
aes_decrypt = AES.new(decrypt, AES.MODE_CBC, decrypt)
放在了循环里,代码正常运行
所以是这个aes的对象不能进行二次解密?不懂其中原理,有没有人能解答一下
今天在练习爬虫的一个案例中需要用到aes进行加解密,但在解密中出现问题
aes_decrypt = AES.new(decrypt, AES.MODE_CBC, decrypt)
放在了循环里,代码正常运行
该回答引用自GPT-3.5,由博主GISer Liu编写:
问题的关键在于对 AES 对象的理解以及在循环中重复使用该对象的影响。在每次解密过程中,AES 对象的状态可能会被修改,导致后续解密产生错误的结果。
解决方案是在每次循环中重新创建一个新的 AES 对象,而不是重复使用同一个对象。这样可以确保每次解密都是在一个初始状态下进行,不受之前解密操作的影响。
以下是修改后的代码示例:
pythonCopy code
from Crypto.Cipher import AES
# 假设 decrypt 是你的解密密钥
decrypt = b'your_decrypt_key'
# 初始化向量 IV,根据你的实际情况填写
iv = b'your_initialization_vector'
# 要解密的密文列表
ciphertexts = [...] # 假设这是你的密文列表
for ciphertext in ciphertexts:
# 在每次循环中创建一个新的 AES 对象
aes_decrypt = AES.new(decrypt, AES.MODE_CBC, iv)
# 解密密文
plaintext = aes_decrypt.decrypt(ciphertext)
# 输出解密结果
print("解密结果:", plaintext.decode('utf-8').rstrip())
这样就确保了每次解密都使用了一个新的 AES 对象,避免了状态被修改导致的问题。
如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订