如何在不使用<time.h>的情况下生成随机数

时间:2018-11-16 18:25:41

标签: c++11 random

我知道如何使用time.h的时钟函数生成随机数,是否有其他方法可以不使用系统时钟来实现

1 个答案:

答案 0 :(得分:2)

这是计算中的一个难题,因为计算机从根本上说是确定性机器,并且在没有外部熵源的情况下无法生成随机数。将伪随机数生成器植入当前系统时间足以模拟“真正的随机性”。

如果您希望避免播种到当前系统时间,并且仍然从PRNG生成唯一编号,则可以使用以下一些选项(请注意,我假设您并不是在谈论打算用于{{3} },它还有许多其他要求):

  1. 如果您的计算机启用了cryptographically secure,请获取堆栈指针寄存器的当前值
  2. 当前存储设备上可用的字节数或当前用户的剩余磁盘配额
  3. 从计算机最近发送或接收的网络数据包的哈希值

话说回来,其中大部分可能是过度杀伤力。为什么不使用当前系统时间作为种子?大多数开发人员都是这样做的,直到他们需要真正不可预测的东西(如CSPRNG)。