Python实现AES加密遇TypeError: int不可迭代问题求助
解决AES加密中的TypeError: argument of type 'int' is not iterable错误
错误原因
你错误地将AES.key_size和AES.block_size赋值为整数128,但AES.key_size原本是一个包含合法密钥长度(字节数)的列表(如[16, 24, 32],对应128、192、256位密钥)。当内部代码检查len(key) not in key_size时,key_size变成了整数,无法进行迭代判断,因此抛出该错误。
另外,pycryptodome库的AES实现默认块大小就是128位,不需要手动修改AES.block_size。
修复方案
- 移除
AES.key_size=128和AES.block_size=128这两行错误的赋值代码 - 确认你的密钥长度符合要求:128位密钥对应16字节(你的密钥
'QwroeApp90652321'共16个字符,UTF-8编码后正好是16字节,符合128位要求)
修正后的代码
from Crypto.Cipher import AES from Crypto.Util.Padding import pad key = 'QwroeApp90652321' plaintext = "wdrdooloo" # 直接创建ECB模式的AES实例,默认块大小128位,密钥长度由传入的key字节数决定 cipher = AES.new(key.encode('utf8'), AES.MODE_ECB) msg = cipher.encrypt(pad(plaintext.encode('utf8'), AES.block_size)) print(msg.hex())
补充说明
- PKCS7填充已经通过
pad函数实现,你传入的第二个参数可以直接用AES.block_size(即16),这样代码更具可读性和维护性 - ECB模式安全性较低,除非有特殊需求,建议优先使用CBC、GCM等更安全的模式
内容的提问来源于stack exchange,提问作者Abin Benny
相关产品推荐
相关产品推荐

