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

标签 python-3.x random

我正在寻找 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)

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

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

笔记:
  • 使 urandom 返回可预测的结果是 possible on Linux ,但需要root访问权限。
  • 最佳答案

    我认为 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/

    相关文章:

    python - 为什么 Python 数据类型在 Python 提示符中表现得像这样?

    python - ks_2samp 返回 p 值 1.0

    c++ - 使用 OpenACC 生成可移植随机数

    javascript - 使子窗口出现在随机位置

    python-3.x - 找到上传文件的url,firebase storage + python

    python - 如何找到什么是字符

    arrays - 从随机数组中检索随机数量的项目

    javascript - 在刷新时向多个元素添加相同的随机类?

    python-3.x - 神奇8球txt文件列表

    python - 安装多个python版本时,如何将模块添加到特定的python版本?