java random


Random采用了(Linear Congruential Generator)线性同余算法(n*i + m)%l进行伪随机变换,seed为基数加当前nano时间戳。

SecureRandom采用更复杂的 SHA1PRAP算法,并且在初始化时,通过系统的properties变量、temp文件夹下文件大小,内存剩余,本地ip地址等系统变量的sha1散列值作为seed。


Random是可预测的随机函数。即只要输入的seed一样,则结果是一致的,所以只要知道了seed,结果就是可预测的。例如:

Random r1 = new Random(1);

Random r2 = new Random(1);

r1.nextInt() == r2.nextInt()


SecureRandom不可预测,例如:

SecureRandom r1 = new SecureRandom();

SecureRandom r2 = new SecureRandom();

byte[] b1 = new byte[10];

r1.nextBytes(b1);

byte[] b2 = new byte[10;

r2.nextBytes(b2);

b1 != b2;


对于RFC标准定义的不可预测的强随机数,可采用系统中cpu消耗,线程切换时间,用户鼠标点击动作,磁盘文件大小等不可预测数据作为seed进行随机化计算。


SecureRandom比Random更安全。假设某网站通过Random随机化session串,hacker只需要获取几个session串后,即可推论出以后的随机session串值。


UUID是基于SecureRandom产生的随机串生成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值