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

AES加密报错:密钥长度不正确(15字节)如何解决?

解决AES密钥长度错误的加密方案

错误原因

报错信息ValueError("Incorrect AES key length (%d bytes)" % len(data))明确指出:你使用的密钥'thisisabadkey'长度为13字节,不符合AES的密钥长度要求。AES仅支持三种合法密钥长度:

  • 16字节(对应AES-128)
  • 24字节(对应AES-192)
  • 32字节(对应AES-256)

解决方案

以下两种方法可解决该问题:

方法1:通过哈希生成合法长度密钥(推荐)

用哈希函数将原密钥转换为固定长度的字节串,既保证密钥长度合规,也提升安全性:

from Crypto.Cipher import AES
from hashlib import sha256

original_key = 'thisisabadkey'
# 用SHA-256哈希原密钥,生成32字节的AES-256密钥
aes_key = sha256(original_key.encode()).digest()
# 注意:ECB模式不安全,实际建议用CBC/GCM等模式
cipher = AES.new(aes_key, AES.MODE_ECB)

# 处理明文:AES要求明文长度为16字节的倍数,需填充
data = b'your_data_to_encrypt'
padding_length = 16 - len(data) % 16
padded_data = data + bytes([padding_length]) * padding_length
encrypted_data = cipher.encrypt(padded_data)

方法2:补全原密钥到合法长度

如果必须保留原密钥的字节内容,可将其补全到最近的合法长度(比如补3个字节到16字节):

from Crypto.Cipher import AES

original_key = 'thisisabadkey'
# 用\x00填充至16字节,也可选择其他填充字符
aes_key = original_key.encode().ljust(16, b'\x00')
cipher = AES.new(aes_key, AES.MODE_ECB)

# 同样需要对明文进行填充处理
data = b'your_data_to_encrypt'
padding_length = 16 - len(data) % 16
padded_data = data + bytes([padding_length]) * padding_length
encrypted_data = cipher.encrypt(padded_data)

重要提醒

ECB模式属于不安全的加密模式,它不会使用初始化向量(IV),相同明文会生成相同密文,容易被破解。实际生产环境中建议使用CBC、GCM等更安全的模式,其中GCM还能提供数据完整性校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:45:15