Crypto Random get_random_bytes 在 py3 中不像在 py2 中那样工作
Crypto Random get_random_bytes is not working in py3 as it did in py2
此代码用于 py2。 py3 我明白了:
代码如下:
from Crypto import Random
import os
def generate_random_bytes(length):
return Random.get_random_bytes(length)
#return bytearray(os.urandom(length)) I tried this line but got the same result
def generate_server_id():
"""Generates 20 random hex characters"""
print(generate_random_bytes(10))
print(ord(c) for c in generate_random_bytes(10))
return "".join("%02x" % ord(c) for c in generate_random_bytes(10))
只需将ord(c)
替换为c
,在Py3中一个字节数组项已经是一个整数而不是一个字符,所以你不需要转换。
您可能想像这样重写它,以使其适用于两个版本:
def generate_server_id():
"""Generates 20 random hex characters"""
try:
return "".join("%02x" % ord(c) for c in generate_random_bytes(10))
except TypeError:
return "".join("%02x" % c for c in generate_random_bytes(10))
此代码用于 py2。 py3 我明白了:
代码如下:
from Crypto import Random
import os
def generate_random_bytes(length):
return Random.get_random_bytes(length)
#return bytearray(os.urandom(length)) I tried this line but got the same result
def generate_server_id():
"""Generates 20 random hex characters"""
print(generate_random_bytes(10))
print(ord(c) for c in generate_random_bytes(10))
return "".join("%02x" % ord(c) for c in generate_random_bytes(10))
只需将ord(c)
替换为c
,在Py3中一个字节数组项已经是一个整数而不是一个字符,所以你不需要转换。
您可能想像这样重写它,以使其适用于两个版本:
def generate_server_id():
"""Generates 20 random hex characters"""
try:
return "".join("%02x" % ord(c) for c in generate_random_bytes(10))
except TypeError:
return "".join("%02x" % c for c in generate_random_bytes(10))