Python如何生成随机数?

8

我知道在Python中应该使用os.urandom()SystemRandom来生成“安全”的伪随机数。

但是Python如何逻辑地生成这些随机数呢?

此外,是否有一种方法可以在Python中生成比其他数字更“随机”的数字呢?


我已经非常详细地回答了一个非常类似的问题(它涵盖了RandomSystemRandom)。**回答链接** - Blastosphere
1个回答

7

对于“安全”的随机数,Python实际上并不生成它们:它从操作系统获取它们,操作系统有一个特殊的驱动程序,从各种现实世界的来源收集熵,比如按键之间的时间差异和磁盘寻道。


我们如何确信这些事件是真正的随机事件?你知道驱动程序叫什么吗? - ruben_KAI
1
这取决于操作系统。对于Linux,请阅读有关“/dev/random”和“/dev/urandom”的内容。 - Wyzard
谢谢!我会回来点赞的,一旦我获得了声望 - 哈哈。那Windows怎么样? - ruben_KAI
你能准确预测下一次按键的时间、按下哪个键、下一次磁盘查找何时发生以及需要多长时间吗?所有这些都是基本上不可预测的(即使具有物理访问权限),因此它们可以用于生成随机数,只要以维护其关键特征的方式进行组合,就像 /dev/random 所做的那样。 - Tony Suffolk 66
1
@BillalBEGUERADJ,os.urandom的文档详细解释了它如何从操作系统获取随机数据,而SystemRandom的文档则说明它调用了os.urandom。至于操作系统如何获取数据,您可以阅读有关/dev/random和/dev/urandom工作原理的信息 - Wyzard
显示剩余11条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接