我正在寻找 n 个随机字节作为字节数组或字节,如 os.urandom
做。
但是我需要能够设置一个随机种子,以便该值是可重现的。
def urandom_from_random(rng, length):
return bytes([rng.randint(0, 255) for i in range(length)])
import random
rng = random.Random(42)
data = urandom_from_random(rng, 120)
print(data)
上面的脚本有效,但效率不高。
除了创建许多整数并将它们转换为字节之外,还有更直接的方法吗?
笔记:
最佳答案
我认为 random
中最接近的函数你想要的是getrandbits
.它返回一个具有请求位数的整数。如果你想把它变成 bytes
例如,您可以使用 int.to_bytes
.
这是一个将这两者配对的快速函数:
def urandom_from_random(rng, length):
if length == 0:
return b''
integer = rng.getrandbits(length * 8)
result = integer.to_bytes(length, sys.byteorder)
return result
您指定给
to_bytes
的字节顺序应该没关系。我告诉它使用系统的 native 字节顺序,但我实际上不知道这是否使它比其他方式更快。
关于python-3.x - os.urandom 使用 Python 的 random 模块是否有可预测的替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37356338/