当前位置: 首页 > 知识库问答 >
问题:

ValueError:AES密钥必须是16、24或32字节长

姬雪松
2023-03-14
from Crypto.Cipher import AES

salt = '!%F=-?Pst970'
key32 = [ ' ' if i >= len(self.salt) else self.salt[i] for i in range(32) ]
bkey32 = str(key32).encode('utf-8')

cipher = AES.new(bkey32, AES.MODE_ECB)
b"['!', '%', 'F', '=', '-', '?', '\\x7f', 'P', 's', 't', '9', '7', '0', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']"

共有1个答案

裘禄
2023-03-14

您正在创建列表的str表示形式,您需要联接列表的内容:

key32 = "".join([ ' ' if i >= len(salt) else salt[i] for i in range(32) ])
bkey32 = key32.encode('utf-8')

str.join创建单个联接字符串:

In [19]: "".join([ ' ' if i >= len(salt) else salt[i] for i in range(32) ])
Out[19]: '!%F=-?Pst970           

或者使用str.format:

salt = '!%F=-?Pst970'
key32 = "{: <32}".format(salt).encode("utf-8")
cipher = AES.new(key32, AES.MODE_ECB)
 类似资料:
  • 下面的代码被写入加密的纯文本,我使用IAIK Twofish加密/解密代码在java下面的示例代码工作正常与128位密钥,但当我尝试它与192和156位密钥它给出了一个异常- 对于上面的方法,当我给128位密钥时,它的工作原理如下所示。

  • 我已经在服务器上配置了HSM,现在使用下面的示例代码解密数据 它第一次运行,第二次显示错误 私钥必须是RSAPrivate(Crt)密钥的实例或有PKCS#8编码

  • 我想为dynamodb中的订单创建一个表,每个订单由(UserID、date、Unique ID、products和total)组成,我想使用按日期排序的UserID查询特定用户的订单,我想知道如何选择分区键?它必须是独一无二的吗?如果是,我如何才能使它独一无二?在mongodb中,我会根据用户ID共享订单。如何使用dynamodb实现同样的效果?

  • 问题内容: 示例:以下代码对JSON Spec有效吗? 还是应该始终使用以下语法?(如果是这样,为什么?) 我还没有在JSON规范中找到关于此的任何东西。尽管他们在示例中使用了围绕键的引号。 问题答案: 是的,您需要引号。这是为了使其更简单,并且避免了对javascript保留关键字必须使用另一种转义方法。

  • 问题内容: 我已经将脚本从Python 2.7转换为3.2,并且有一个错误。 在最后一行,我得到了这个错误: 我已经安装了Python 3.2,并且已经安装了lxml-2.3.win32-py3.2.exe。 在Python 2.7上可以使用。 问题答案: 输出文件应处于二进制模式。

  • 今天我了解到,“密码”往往意味着任意数量的字符的可记忆字符串,而“密钥”意味着高度随机的位字符串(基于所使用的加密算法的特定长度)。 所以今天我第一次听说了密钥派生函数的概念。 我对如何从任意长度的密码(在PHP中)派生32字节密钥感到困惑。 以下方法有效,但忽略了“[盐]应随机生成”的指示(钠也是如此): 以下方法也有效,但感觉也不太对: 在我的所有搜索中,我很惊讶我没有在PHP中找到一种“官方