使用 Python 的 random 模块是否有可预测的 os.urandom 替代品?

ide*_*n42 5 random python-3.x

我希望将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)
Run Code Online (Sandbox Code Playgroud)

上面的脚本有效,但效率不高。

除了创建许多整数并将它们转换为字节之外,还有更直接的方法吗?


笔记:

  • 在 Linux可以让 urandom 返回可预测的结果,但需要 root 访问权限。

小智 1

在代码开头使用种子:

import random
random.seed(7)
rng = random.Random(42)
data = urandom_from_random(rng, 120)
Run Code Online (Sandbox Code Playgroud)

只要您在种子中使用 7,您就拥有相同的随机选择。然后你可以将其更改为任何值。