You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为AES CBC模式加密代码配置初始化向量IV解决参数缺失报错

修复方案

错误原因

CBC模式要求必须传入16字节长度的初始化向量(IV)作为参数实例化modes.CBC类,你当前代码存在两处问题:

  • 调用modes.CBC()时没有传入任何参数
  • 定义的IV是十六进制字符串,没有转换为符合要求的字节类型

修复步骤

  1. 将十六进制格式的IV字符串转换为字节类型,使用bytes.fromhex()方法即可
  2. 将转换后的IV作为参数传入modes.CBC()的构造函数

修复后完整代码

from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend


key = b'InformationSecurity M.Sc'
message =   b"""yeahcourse snake"""
# 改动点1:将十六进制字符串IV转为字节类型
IV = bytes.fromhex('000102030405060708090a0b0c0d0e0f')
aesCipher = Cipher(algorithms.AES(key),
                   # 改动点2:将IV传入CBC模式构造函数
                   modes.CBC(IV),
                   backend=default_backend())
aesEncryptor = aesCipher.encryptor()
aesDecryptor = aesCipher.decryptor()

    
message += b"E" * (-len(message) % 16) # 仅测试用,生产环境建议使用官方PKCS7填充方案
ciphertext = aesEncryptor.update(message)

print("plaintext:",message)
print("ciphertext:",ciphertext.hex()) 
decryptedMessage = aesDecryptor.update(ciphertext)
print("recovered:",decryptedMessage)

补充说明

  • AES的IV长度必须固定为16字节,和AES的块大小保持一致
  • 生产环境使用时不要硬编码IV,每次加密应生成随机IV,和密文一起存储/传输即可
  • 自定义填充仅适合测试使用,正式场景建议调用cryptography库内置的PKCS7填充工具,避免出现安全问题

内容的提问来源于stack exchange,提问作者user12155125

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:18:04