加密随机get_random_bytes在py3中不起作用,就像在py2中一样

时间:2016-05-18 02:39:12

标签: python python-3.4 pycrypto

此代码曾用于py2。在py3中,我得到了这个:

console

以下是代码:

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

1 个答案:

答案 0 :(得分:1)

只需将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))