Django中使用AES加密MP3音频触发AssertionError问题求助
问题排查与解决
错误核心原因
触发AssertionError是因为传入的密钥长度不满足代码要求:
- 代码中
key_bytes = 16,明确要求密钥必须是16字节(对应AES-128算法),但你调用时传的字符串"testing"仅为7字节,不满足断言len(key) == key_bytes的校验条件。 - 另外函数注释写的是"32-byte key",但代码实际用的是16字节,注释与代码逻辑不一致,也容易造成混淆。
针对性解决方案
方案1:适配AES-128算法
直接传入16字节长度的密钥即可,示例:
# 调用时使用16字节的密钥(示例字符串) enkripsi = encrypt("my16bytekeyhere!", testaudio)
方案2:切换为AES-256算法
若想使用AES-256,需修改代码中的密钥长度要求,并传入32字节的密钥:
# 修改加密函数开头的key_bytes值 key_bytes = 32 # 调用时传入32字节的密钥(示例字符串) enkripsi = encrypt("my32bytekeyhere1234567890abcdef", testaudio)
生产环境注意事项
- 不要用随意的短字符串当密钥,建议用密码学安全的随机生成器生成密钥:
import secrets # 生成AES-128的随机密钥 key_128 = secrets.token_bytes(16) # 生成AES-256的随机密钥 key_256 = secrets.token_bytes(32)
- 用字符串作为密钥时,要注意编码后的字节长度(比如UTF-8下汉字占3字节),避免因字符编码导致长度不符合要求。
内容的提问来源于stack exchange,提问作者HelpMePlease
相关产品推荐
相关产品推荐

