如何预测python的随机性?

问题描述 投票:0回答:1

根据下面提供的代码,我如何预测种子或确定生成的数字?

from random import randint, seed, sample

seed(randint(1, 2^256))
numbers = sample(range(1, 50), 6)

到目前为止,我已经尝试设置相同的当地时间,这通常适用于重现结果。但是,我需要一种不同的方法。

python random random-seed
1个回答
0
投票

如何预测种子或确定生成的数字?

通过阅读所涉及的所有内容的源代码,然后在虚拟环境中逐行运行以重现结果。最重要的是,通过模拟了解启动条件。

randint
在这里实现https://github.com/python/cpython/blob/5c89adf385aaaca97c2ee9074f8b1fda0f57ad26/Lib/random.py#L336基于randrange https://github.com/python/cpython/blob/5c89adf385aaaca97c2ee9074f8b1fda0f57ad26/Lib/random.py#L295基于https://github.com/python/cpython/blob/main/Lib/random.py# L275 _randbelow 是基于getrandbits https://github.com/python/cpython/blob/main/Lib/random.py#L893 调用 _random ,其实现于:

https://github.com/python/cpython/blob/5c89adf385aaaca97c2ee9074f8b1fda0f57ad26/Python/bootstrap_hash.c#L440

   Used sources of entropy ordered by preference, preferred source first:

   - BCryptGenRandom() on Windows
   - getrandom() function (ex: Linux and Solaris): call py_getrandom()
   - getentropy() function (ex: OpenBSD): call py_getentropy()
   - /dev/urandom device

现在它得到了非常的架构,特定于硬件。您必须跟踪您的操作系统及其实现,并且使用硬件随机生成器可能会变得更加棘手。

© www.soinside.com 2019 - 2024. All rights reserved.