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

AES解密报错ValueError: Padding is incorrect,密钥IV已验证正确求解决

AES解密出现"ValueError: Padding is incorrect."的问题排查与修复

问题根源

你的代码存在两个关键错误:

  • 错误对密文执行填充操作:AES加密后的密文本身已经是符合块大小的(加密阶段会对明文做填充),解密时完全不需要对密文调用pad。你代码里的enc_text1=pad(enc_text,16)会篡改原始密文结构,直接导致解密后的数据无法通过unpad校验。
  • 未解码Base64密文:enc_text是Base64编码后的字符串,必须先解码成二进制密文才能传入AES解密函数,直接用字符串字节解密会导致数据格式完全错误。

修正后的代码

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

# Base64编码的密文,先解码为二进制
enc_text = "u/jR/dq99cIt9n5JdeJqA6h1keoUvnotNYgEGUKrcscG2/ytj3iQPJAhe//OPsBATwJS61/SItlqxH6rfzgVvo6un1/ja7nFQS3rkNDRaC8rj+qBtNoeoOCk32E73A8rZAXzBks7hb0aGaN0+GAGMdnSCQHGgXWtolN9zRuemwvYLOHEadTryo577AyInKa35TUOwDub/1OYl+xo+I+auZL4suMNcNNTYE9lhKFU0iY="
key = "3e60a9e7ba37f66060ca7597d5fbc1bc".encode("utf-8")
iv = "www.elahmad.com/".encode('utf-8')

# 解码Base64密文为二进制
ciphertext = base64.b64decode(enc_text)
# 初始化AES CBC实例
cipher = AES.new(key, AES.MODE_CBC, iv)
# 解密后对明文去填充
decrypted_data = unpad(cipher.decrypt(ciphertext), 16)
# 转为UTF-8字符串输出
print(decrypted_data.decode("utf-8"))

修正说明

  1. 移除了对密文的pad操作,仅在解密后对明文执行unpad。
  2. 新增base64.b64decode(enc_text)步骤,将Base64字符串转换为AES可处理的二进制密文。
  3. 最后把解密得到的二进制数据解码为UTF-8字符串(适配明文为文本的场景)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:33:13