点157 2024-02-24 15:55 采纳率: 0%
浏览 11

在使用python中同一aes对象进行二次解密时出现问题

今天在练习爬虫的一个案例中需要用到aes进行加解密,但在解密中出现问题

img


代码其他部分都没有问题,但不知道为什么每次循环只有第一次解密成功,第二次解密出来的数据就出现错误,更改循环的起始值也是一样的问题
后来将代码更改,将

aes_decrypt = AES.new(decrypt, AES.MODE_CBC, decrypt)

放在了循环里,代码正常运行

img


所以是这个aes的对象不能进行二次解密?不懂其中原理,有没有人能解答一下

  • 写回答

3条回答 默认 最新

  • GISer Liu 2024-02-24 15:56
    关注

    该回答引用自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 对象,避免了状态被修改导致的问题。

    如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订

    用户答题指南

    评论

报告相同问题?

问题事件

  • 创建了问题 2月24日

悬赏问题

  • ¥15 更换了一个新的win10系统,再下载VS时碰到的问题,是C++组件的?
  • ¥15 关于罗技鼠标宏lua文件的问题
  • ¥15 halcon ocr mlp 识别问题
  • ¥15 已知曲线满足正余弦函数,根据其峰值,还原出整条曲线
  • ¥20 无法创建新的堆栈防护界面
  • ¥15 sessionStorage在vue中的用法
  • ¥15 wordpress更换域名后用户图片头像不显示
  • ¥15 如何在ubunto上安装CEF (Chromium Embedded Framework),并且基于qt实现打开一个web
  • ¥30 AD9854 为什么输出波形幅度受限,AI机器人勿扰
  • ¥15 如何在ubunto上安装CEF (Chromium Embedded Framework