【发布时间】:2016-10-21 15:47:49
【问题描述】:
我有一个字节数组,它是一个 128 位 AES 密钥,我想在 Python 脚本中使用它来使用上述密钥加密一些信息。
我将密钥存储为十六进制字符串,例如“27821D90D240EA4F56D0E7612396C69E”(显然这不是真正的密钥,但格式相同)。
我已经从该密钥生成了一个字节数组,这就是我迄今为止在其他语言(Java、C# 和 PHP)中使用 AES 密钥的方式,如下所示:
AES_KEY = bytearray.fromhex('27821D90D240EA4F56D0E7612396C69E')
这很好,但是当我尝试使用它来创建密码时,它抱怨它需要一个字符串在第一个参数中:
cipher = AES.new(AES_KEY, AES.MODE_CBC, os.urandom(16));
TypeError:参数 1 必须是字符串或只读缓冲区,而不是 字节数组
我尝试从字节数组中获取一个字符串,如:
AES_KEY = bytearray.fromhex('27821D90D240EA4F56D0E7612396C69E').decode()
或
AES_KEY = bytearray.fromhex('27821D90D240EA4F56D0E7612396C69E').decode('utf-8')
无济于事,因为该键中有非 ascii 和非 unicode 值。
更换钥匙不是一种选择。
有什么想法吗?
非常感谢,
【问题讨论】:
-
你用的是哪个库,pycrypto?
-
@kennytm 是的。不过,我想我已经设法找到了解决方案。
标签: python cryptography aes