Python 中的"os.urandom"函数真的是一个随机函数吗?



如果二进制文件是通过while(1)连续创建的,给定无限的时间,是否可以生成每个字节数组的事例数而不重复?

您所描述的不是随机的。当某件事是随机的,它就有机会重复它自己。如果你看看这个维基百科页面的潜在问题部分,它会解释安全专业人员在随机数生成器中寻找什么。

那么os.urandom有多随机?文件上说的第一件事是

返回适合加密使用的大小为随机字节的字符串。

任何声明可以用于加密的东西都是非常好的随机数据来源。在Linux上,它使用/dev/urandom,其中包含来自鼠标移动、网络流量等的随机数据。

在Windows上,使用cryptgenrandom,这已被Windows弃用,可能有一些弱点,但算法的具体工作方式尚不清楚,Python仍在使用它,并声称它在加密方面仍然安全,因此‍♂️.

有几个模块是用来生成你可能感兴趣的随机数的。有一个随机模块,它具有random.random等函数,可以生成快速随机数。这些不是随机的,但它们生成速度很快。然后,当你想要好的随机数时,你可以继续使用os.urandom,但也有一个模块专门用于创建加密随机数,使用相同的/dev/urandom数据源。这个模块被称为机密模块。

如果你真的想知道使用/dev/urandom有多安全;铀元素研究";提出了这样一个193页的研究结果!如果你真的想读的话,你可以阅读。所以,是的,如果安全专业人员对它进行了很好的分析,然后宣布它可以安全用于加密,我认为我们可以信任它。