相当于Windows上的/ dev / urandom?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了相当于Windows上的/ dev / urandom?相关的知识,希望对你有一定的参考价值。

我的应用程序希望获得一个随机数,最好是有一个熵(如果有的话),但是不需要加密质量,并且希望确保在系统熵池耗尽时(例如,在一个农场)。

我知道CryptGenRandom,但是未指定其在不利熵条件下的阻塞行为。

在Unix上,/dev/urandom支持此用例。 Windows上是否有可用的等效功能?我宁愿避免仅使用非系统RNG来获取非阻塞语义。

答案
对于玩具应用程序,您可以使用rand(),但是Windows上的实现质量差劲。

更好的选择就是在程序中包含合适的伪随机数生成器。 Mersenne Twister是IMO的不错选择,特别是因为有很多可用的实现(包括C ++ 11标准库和Boost中的实现)。

另一答案
如果我需要随机数的非阻塞行为,通常会预先生成n数字并将其存储在内存变量中:即,如果我知道每秒需要30个随机数,则需要3秒钟来计算它们(包括块),然后在加载主代码时预生成300,将它们存储在数组或向量中,并在需要时使用它们;在使用它们时,每次使用完一个线程,我都会在一个单独的线程上生成另一个,用新生成的一个替换使用的随机数,然后移动到列表中的下一个,这样我就达到了极限(在这种情况下300)我知道何时可以简单地从数组/向量/列表的开头再次开始,并且所有随机数都是新鲜的并且将是无阻塞的(因为它们是预先生成的)。

这意味着您可以使用任何您喜欢的随机数生成器,而不必担心阻塞行为,但是它会浪费更多内存,但是对于需要随机数的编码类型而言,这可以忽略不计。

希望这会有所帮助,因为我无法在评论中全部说明:)

另一答案
您可以等待一个充满熵的好种子,并按照GMasucci的建议预先生成一长串随机数。

除非您的系统已经受到威胁,否则看来好种子足以产生一系列http://www.2uo.de/myths-about-urandom/中所讨论的无关数字

从讨论中,我得到连续的(“ true” /“ fresh”)随机数的馈送,只有在您的系统状态(您的熵的源已知并且攻击者知道其当前状态)时才需要它,点。给块密码提供更多的随机性后,其输出的可预测性将降低。

种子的来源?两个或两个以上不太可能已经受到破坏的受信任软件。我尝试模糊使用时间函数作为种子的函数的可预测性:本地rand_function()+一些可变延迟+ mysql的rand()。从那里,由一些好的库生成的伪随机数列表。

以上是关于相当于Windows上的/ dev / urandom?的主要内容,如果未能解决你的问题,请参考以下文章

Linux下weblogic启动慢

Composer 读取错误的 PHP 版本(Windows 上的 ACQUIA DEV DESKTOP)

相当于 Windows/MSVC 上的段错误?

Windows 上的 Java 无法写入 PhysicalDriveX

用于vue-cli的Webpack dev服务器:错误产生EACCES

带有 msys 的 Windows 上的 GMP