首页  

Random和SecureRandom     所属分类 architecture 浏览量 1151
伪随机数  
给定一个初始种子,产生的随机数序列是完全一样的
Random 
nextInt() nextLong() nextFloat() nextDouble()
创建Random实例时,如果不给定种子,使用系统当前时间戳作为种子

Math.random() 内部调用Random类


真随机数
SecureRandom
不用指定种子
使用RNG(random number generator)算法

SecureRandom 通过操作系统提供的安全的随机种子来生成随机数。
种子是通过CPU的热噪声、读写磁盘的字节、网络流量等各种随机事件产生的“熵”。
密码学中,安全的随机数非常重要。如果使用不安全的伪随机数,所有加密体系都将被攻破。

public class SecureRandom extends java.util.Random


// 熵池不够会阻塞
System.out.println(UUID.randomUUID().toString());
SecureRandom secureRandom = new SecureRandom();
System.out.println(secureRandom.nextInt());
secureRandom = SecureRandom.getInstanceStrong();
System.out.println(secureRandom.nextInt());


Random random = new Random(1);
for (int i = 0; i < 10; i++) {
	System.out.print(random.nextInt(10) + ",");
}
System.out.println();

// 指定种子 , 种子相同 ,随机序列相同
random = new Random(1);
for (int i = 0; i < 10; i++) {
	System.out.print(random.nextInt(10) + ",");
}
System.out.println();

上一篇     下一篇
springboot ApplicationContextInitializer 使用

日志框架冲突及解决方法

linux熵池太小导致随机函数阻塞

熵池与SecureRandom

老程序员的20条编码原则

sql优化建议