Clarencep
2017-05-31 10:10:37 +08:00
一般各种语言的基本库里面的 rand()函数不都配对一个 srand()的设置随机数种子的函数吗? 相同的种子后面产生的随机数都是一样的, 那自然随机性不是那么的好。
linux 下的 /dev/random 是一个不错的选择。但是使用 linux 的 /dev/random 的时候要注意,很有可能会被阻塞住的:
参考 wikipedia:
> 发生器有一个容纳噪声数据的熵池,在读取时,/dev/random 设备会返回小于熵池噪声总数的随机字节。/dev/random 可生成高随机性的公钥或一次性密码本。若熵池空了,对 /dev/random 的读操作将会被阻塞,直到收集到了足够的环境噪声为止[3]。这样的设计使得 /dev/random 是真正的随机数发生器,提供了最大可能的随机数据熵,建议在需要生成高强度的密钥时使用。
> /dev/random 的一个副本是 /dev/urandom (“ unblocked ”,非阻塞的随机数发生器[4]),它会重复使用熵池中的数据以产生伪随机数据。这表示对 /dev/urandom 的读取操作不会产生阻塞,但其输出的熵可能小于 /dev/random 的。它可以作为生成较低强度密码的伪随机数生成器,不建议用于生成高强度长期密码。