如何在不保持内部状态的情况下生成高质量的随机数?

时间:2015-06-10 08:05:42

标签: random

通常,您在应用程序开始时使用种子(通常是时间)初始化某种随机数生成器对象,然后将其保留并询问随机数。这个对象就是状态。

我有一个应用程序启动,生成一个数字,然后退出。由于RNG是从时钟初始化的,我仍然有一些随机性,但框架提供的标准RNG并不意味着像这样使用(询问每个种子的第一个数字),因此生成的数字的质量很差。如何在不在应用程序调用之间保存RNG状态的情况下生成高质量的随机数?

我在Windows上这样做,如果重要的话。获得额外的随机源很好,但不允许留下数据(例如写入磁盘)。

1 个答案:

答案 0 :(得分:1)

在Windows上有一个安全的随机生成器CryptGenRandom,它将为您完成所有这些。大多数语言都有SecureRandom类,dev/random或类似的访问权限。其他操作系统将有类似的安排。基本上,他们从系统内导入熵以播种他们自己的发电机。

对于更通用的解决方案,您可以在卡上使用硬件RNG,例如 Quantis RNG