繁体   English   中英

解码os.urandom()字节对象

[英]decode os.urandom() bytes object

我试图得到一个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中工作,但我需要在3x中使用它。

使用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

private_key = "".join(["%02x" % ord(x) for x in os.urandom(32)])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM