[Java] 随机数 - Random VS SecureRandom

阅读时间: 3分钟

首先,在这里介绍的Random是指java.util.Random。
而在Java中有不少class和method都是继承至 java.util.Random,例如: ThreadLocalRandom, Math.random() 等等。

Random
java.util.Random中生成的随机数是基于它的种子(seed),种子(在JDK 1.5之后)选用了System.nanoTime(),它是从某个不确定的时间起(可以是过去/现在/未来),到当下的时间差,精确到纳秒,它的主要用途是衡量一个时间段,例如运行一段代码/一个指令,所执行的时间。
而产生seed的值是运用了线性同余法伪随机数生成器linear congruential pseudorandom number generator (LGC)。这个算法最后得出的是伪随机数。
因此,从输出中可以很容易计算出种子值。

SecureRandom
SecureRandom也是继承至 java.util.Random。
但SecureRandom 使用种子不是以时间作标準,而是以一些随机事件作为标準,例如滑鼠点选、键盘点选等等。
此外,SecureRandom使用加密的强随机数生成器 (RNG)来产生最终的seed值,以确保不能从输出中的资料计算出种子值。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章