如何使用Python将128位AES加密密钥转换为字符串?

如何使用Python将128位AES加密密钥转换为字符串?,python,aes,codec,aes-gcm,Python,Aes,Codec,Aes Gcm,我正在尝试将字节格式的128位AES密钥解码为字符串,以将其存储在数据库中。我曾尝试将Python内置的decode()与ascii和utf-8编解码器一起使用,但出现以下错误: UnicodeDecodeError:“ascii”编解码器无法对位置1中的字节0xd9进行解码:序号不在范围内(128) UnicodeDecodeError:“utf-8”编解码器无法解码位置2:无效起始字节中的字节0x94 我正在使用库来实现它。二进制文件通常用十六进制或base64编码,以便将其作为文本处理。P

我正在尝试将字节格式的128位AES密钥解码为字符串,以将其存储在数据库中。我曾尝试将Python内置的
decode()
ascii
utf-8
编解码器一起使用,但出现以下错误:

UnicodeDecodeError:“ascii”编解码器无法对位置1中的字节0xd9进行解码:序号不在范围内(128)

UnicodeDecodeError:“utf-8”编解码器无法解码位置2:无效起始字节中的字节0x94


我正在使用库来实现它。

二进制文件通常用十六进制或base64编码,以便将其作为文本处理。Python的
binascii
模块可用于两种类型的编码,如下所示:

import random
import binascii

keybinary=random.randrange(0, pow(2,128)).to_bytes(16, byteorder='big')
print('keybinary', keybinary)

keyhex=binascii.b2a_hex(keybinary).decode("utf-8").strip()
print('keyhex', keyhex)

keyb64=binascii.b2a_base64(keybinary).decode("utf-8").strip()
print('keyb64', keyb64)
这将产生:

keybinary b'b3\xfd\xa9\xfe\x11\x86op\x10\x02\x0b\x1bE\x1f\x89'
keyhex 6233fda9fe11866f7010020b1b451f89
keyb64 YjP9qf4Rhm9wEAILG0UfiQ==

钥匙现在是什么格式的?“它不起作用”是什么意思?总是包括它正在做什么和你期望它做什么。@schroeder我已经更新了帖子。当字节不代表字符串时,你不能将字节解码成字符串。理想情况下,您应该将字节存储在数据库中的二进制列中。或者,将字节编码为base 64,将其转换为ASCII安全字符串。感谢您的编辑。现在您可以进一步分解您的问题:如何将字节转换为字符串?这是一个很容易查找的问题:我的后续问题是为什么首先要转换为字符串?您可以在数据库中存储字节对象。。。