os.urandom()解码问题

我试图得到一个private_key所以,我试过这个:

private_key = os.urandom(32).encode('hex') 

但它会抛出这个错误:

 AttributeError: 'bytes' object has no attribute 'encode' 

所以我检查问题并解决了这个问题,在Python3x字节中只能解码。 然后我改变它:

 private_key = os.urandom(32).decode('hex') 

但现在它抛出这个错误:

 LookupError: 'hex' is not a text encoding; use codecs.decode() to handle arbitrary codecs 

我真的不明白为什么。 当我在最后一个错误之后尝试这个时

 private_key = os.urandom(32).codecs.decode('hex') 

它说

AttributeError:'bytes'对象没有属性'codecs'

所以我卡住了,我能做些什么来解决这个问题? 我听说这是在Python 2X的工作,但我需要在3倍使用它。

使用binascii.hexlify 。 它可以在Python 2.x和Python 3.x中使用。

 >>> import binascii >>> binascii.hexlify(os.urandom(32)) b'daae7948824525c1b8b59f9d5a75e9c0404e46259c7b1e17a4654a7e73c91b87' 

如果你需要一个字符串对象而不是Python 3.x中的字节对象,使用decode()

 >>> binascii.hexlify(os.urandom(32)).decode() 'daae7948824525c1b8b59f9d5a75e9c0404e46259c7b1e17a4654a7e73c91b87' 

在Python 3中, bytes对象没有.encode()方法(加强Unicode文本与二进制数据(字节)的区别)。

对于字节到字节的转换,您可以使用codecs.encode()方法 :

 import codecs import os print(codecs.encode(os.urandom(32), 'hex').decode()) 

而相反:

 print(codecs.decode(hex_text, 'hex')) # print representation of bytes object 

注意:没有.decode()调用,因为os.urandom返回的字节没有字符编码(它不是一个文本,它只是一个随机的字节序列)。

codecs可以在内部使用binascii.hexlifybinascii.unhexlify