随机数真的随机吗?

随机数随机吗?

其实计算机的底层是有无数个二极管组成的,每个二极管都是特定的状态。所以无法做到真正的随机。真正的随机数需要靠硬件去打造。

伪随机数

伪随机数,通常意义上讲是软件领域的随机数。是因为计算机软件上是没有真正意义上的随机数。
随机数是安全领域的核心,如:依赖难以预测的随机数作为秘钥(Secret Key)

怎样实现更安全的随机数

  1. 真正重视随机数,不能用任何时间函数来充当随机数。系统时间看上去随机,但是是顺序增长,是可以被预测的。因此任何时间函数都不能当做随机数来使用。
  2. 在重要或敏感的系统中,要用足够强壮的随机数算法。因为伪随机数的种子一旦确定之后,再算出来的随机数的值是固定的。如Java中的random函数。
    可以使用Java.security.SecureRandom包里的随机数来代替random函数中的随机数,因为强壮的随机数算法采用更随机的事件作为种子:如鼠标的点击。
    同时C/C++中的srand/rand也是比较弱的,可以使用Linux里的/dev/random和/dev/urandom来替代
  3. 增大随机数的空间范围
  4. 组合多个随机数,增加随机数的复杂度。比如利用哈希算法。

你可能感兴趣的:(随机数真的随机吗?)