Random和SecureRandom
所属分类 architecture
浏览量 1322
伪随机数
给定一个初始种子,产生的随机数序列是完全一样的
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优化建议