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

Rijndael-128/CBC256算法Python解密问题求助

解决方案与Python解密代码

问题原因

CBC模式要求加密数据长度必须是AES块大小(16字节)的整数倍,报错说明你传入的加密数据(value解码后)长度不符合要求,或解密后需要去除填充字节。另外需明确:你提到的Rijndael-128搭配32字节密钥,实际对应AES-256-CBC模式(密钥长度256位),IV必须为16字节(与块大小一致)。

解决步骤

  • 解析Base64解码后的JSON结构,提取iv和value字段
  • 对iv和value分别做Base64解码,得到二进制原始数据
  • 使用AES-256-CBC初始化解密器,传入密钥、IV
  • 解密后去除PKCS#7填充(加密场景下最常用的标准填充方式)

完整代码

首先安装依赖库:

pip install pycryptodome

解密代码:

import base64
import json
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad

# 替换为你的32字节密钥(bytes类型,若为字符串需先转对应编码)
input_key = b"your_32_byte_secret_key_here"

# 替换为Base64解码后的完整JSON字符串
base64_decoded_json = '''{
"iv":"zv2rEAMi38LKD2FJlIeMMg==",
"value":"UnnuNWqoZIgiALa4IchFA4ReYcBYwIdtpQEefEmt/ViEMgBVMhfCAydGo1tXVRAdNNRSfMm6VelGT5vORxTFM/03t3id5f5RQaPxSQ1rDRsn2yGyANDLF04szC+FhvVXiW5SBVAEtpFe....."
}'''

# 解析JSON数据
data = json.loads(base64_decoded_json)

# Base64解码IV和加密内容
iv = base64.b64decode(data["iv"])
encrypted_value = base64.b64decode(data["value"])

# 初始化AES解密器
cipher = AES.new(input_key, AES.MODE_CBC, iv)

# 解密并去除填充
try:
    decrypted_bytes = unpad(cipher.decrypt(encrypted_value), AES.block_size)
    # 转换为明文字符串(若原始明文是二进制数据,直接使用decrypted_bytes即可)
    plaintext = decrypted_bytes.decode("utf-8")
    print("解密结果:", plaintext)
except ValueError as e:
    print(f"解密失败:{e},请检查密钥正确性、加密数据完整性")

注意事项

  • 务必替换示例中value字段的截断内容(.....)为数据库中取出的完整Base64编码值
  • 密钥必须严格为32字节长度,若密钥是字符串,需确保编码后长度符合要求(如input_key = "your_key".encode("utf-8"),需保证结果是32字节)
  • 若加密时使用了非PKCS#7的填充方式(如零填充),需替换unpad为对应逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 19:43:27