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))