在 Python 中使用字节数组作为 AES 算法的密钥

Fra*_*zoa 5 python cryptography aes

我有一个字节数组,它是 128 位 AES 密钥,我想在 Python 脚本上使用该密钥,以使用上述密钥对一些信息进行加密。

我将密钥存储为十六进制字符串,例如“27821D90D240EA4F56D0E7612396C69E”(显然这不是真正的密钥,但具有相同的格式)。

我已经从该密钥生成了一个字节数组,这就是到目前为止我在其他语言(Java、C# 和 PHP)中使用 AES 密钥的方式,如下所示:

AES_KEY = bytearray.fromhex('27821D90D240EA4F56D0E7612396C69E')
Run Code Online (Sandbox Code Playgroud)

这工作正常,但是当我尝试使用它来创建密码时,它抱怨它需要第一个参数中的字符串:

cipher = AES.new(AES_KEY, AES.MODE_CBC, os.urandom(16));
Run Code Online (Sandbox Code Playgroud)

类型错误:参数 1 必须是字符串或只读缓冲区,而不是字节数组

我尝试从字节数组中获取字符串,如下所示:

AES_KEY = bytearray.fromhex('27821D90D240EA4F56D0E7612396C69E').decode()
Run Code Online (Sandbox Code Playgroud)

或者

AES_KEY = bytearray.fromhex('27821D90D240EA4F56D0E7612396C69E').decode('utf-8')
Run Code Online (Sandbox Code Playgroud)

无济于事,因为该键中有非 ASCII 和非 Unicode 值。

更换钥匙不是一个选择。

有任何想法吗?

预先非常感谢,

Fra*_*zoa 5

显然这可以解决问题:

AES_KEY = str(bytearray.fromhex('27821D90D240EA4F56D0E7612396C69E'))
Run Code Online (Sandbox Code Playgroud)

现在看起来很明显了,不是吗?