how - ¿Cómo puedo convertir un urandom python en una cadena?
random.choice python (3)
El siguiente código funcionará en Python 2.7 y 3:
from base64 import b64encode
from os import urandom
random_bytes = urandom(64)
token = b64encode(random_bytes).decode(''utf-8'')
Si llamo a os.urandom (64), me dan 64 bytes aleatorios. Con referencia a convertir bytes a una cadena de Python probé
a = os.urandom(64)
a.decode()
a.decode("utf-8")
pero obtuve el error de rastreo que indica que los bytes no están en utf-8.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: ''utf-8'' codec can''t decode byte 0x8b in position 0: invalid start byte
con los bytes
b''/x8bz/xaf$/xb6/x93q/xef/x94/x99$/x8c/x1eO/xeb/xed/x03O/xc6L%/xe70/xf9/xd8
/xa4/xac/x01/xe1/xb5/x0bM#/x19/xea+/x81/xdc/xcb/xed7O/xec/xf5//}/x029/x122
/x8b/xbd/xa9/xca/xb2/x88/r+/x88/xf0/xeaE/x9c''
¿Hay un método de prueba completa para decodificar estos bytes en alguna representación de cadena? Estoy generando tokens sudo aleatorios para realizar un seguimiento de los documentos relacionados en varios motores de base de datos.
Puede usar la codificación base-64. En este caso:
a = os.urandom(64)
a.encode(''base-64'')
También tenga en cuenta que estoy usando encode
aquí en lugar de decode
, ya que decode
está tratando de llevarlo desde cualquier formato que especifique a Unicode. Por lo tanto, en su ejemplo, está tratando los bytes aleatorios como si formaran una cadena utf-8
válida, lo que rara vez será el caso con bytes aleatorios.
Tienes bytes aleatorios; Me sorprendería mucho si alguna vez se pudiera decodificar con una cuerda.
Si tiene que tener una cadena Unicode, decodifique desde Latin-1:
a.decode(''latin1'')
porque mapea bytes uno a uno con los puntos de código Unicode correspondientes.