我对random.seed()Python中的内容有点困惑.例如,为什么下面的试验会做他们所做的(始终如一)?
>>> import random
>>> random.seed(9001)
>>> random.randint(1, 10)
1
>>> random.randint(1, 10)
3
>>> random.randint(1, 10)
6
>>> random.randint(1, 10)
6
>>> random.randint(1, 10)
7
Run Code Online (Sandbox Code Playgroud)
我找不到关于此的好文档.
我想要一个可以生成伪随机值序列的函数,但是每次运行时该序列都是可重复的.我想要的数据必须在给定范围内相当好地随机分布,它不一定是完美的.
我想编写一些基于随机数据运行性能测试的代码.我希望每台机器上的每次测试运行的数据都是相同的,但我不希望出于存储原因而将测试随机数据发送出去(最终可能会导致很多兆字节).
该random模块的库似乎并不表示相同的种子将始终在任何计算机上提供相同的序列.
编辑:如果您打算建议我播种数据(如上所述),请提供说明该方法有效的文档,并将适用于一系列机器/实现.
编辑:Mac OS X上的CPython 2.7.1和PyPy 1.7以及CPython 2.7.1和CPython 2.52 = .2 Ubuntu似乎给出了相同的结果.尽管如此,还没有任何文件以黑白方式规定这一点.
有任何想法吗?
据我所知,依赖Python 2的内置input()函数(而不是在Python 3中raw_input()重命名input())容易出现安全漏洞.在这个问题中,我试图确定如何证明这类漏洞.
具体来说,我正在尝试确定如何生成下面代码的输入,这将导致发出"允许访问",而不修改程序本身,只需通过更改传递给stdin以响应input()调用的值.
import random
pass_true = input("What is the password?")
password = random.randint(0,2**30)
if password == pass_true:
print("Access granted.")
else:
print ("Access denied.")
Run Code Online (Sandbox Code Playgroud)
如果随机数是在输入调用之前生成的(也就是说,如果切换了第二行和第三行),则只能输入pass_true字符串,随后将通过该名称评估变量的值 - 但是在input()调用时尚不知道随机数,这种方法不起作用.