安全随机类:SecureRandom


Random 类中实现的随机算法是伪随机,也就是有规则的随机
虽然说,可以设置种子,产生不同的随机数;但是如果种子相同,仍然是产生相同的随机数
所以在需要频繁生成随机数,或者安全要求较高的时候,不要使用 Random,因为其生成的值其实是可以预测的。

SecureRandom 类提供加密的强随机数生成器 (RNG)
它的许多实现都是伪随机数生成器 (PRNG) 形式,这意味着它们将使用确定的算法根据实际的随机种子生成伪随机序列
但是,SecureRandom 类收集了一些随机事件,比如鼠标点击,键盘点击等等,SecureRandom 使用这些随机事件作为种子。这意味着,种子是不可预测的,而不像 Random 默认使用系统当前时间的毫秒数作为种子,有规律可寻。

创建 SecureRandom

内置两种随机数算法,NativePRNG 和 SHA1PRNG

new

默认是使用 NativePRNG 算法生成随机数

getInstance

  • 1:算法名(必传)
  • 2:算法程序包(可选)
SecureRandom secureRandom1 = SecureRandom.getInstance("SHA1PRNG");

SecureRandom secureRandom2 = SecureRandom.getInstance("SHA1PRNG", "SUN");

使用

和 Random 类似用法

生成随机数

nextInt(int num)
生成 [0, num)的值

生成随机 byte 数组

nextBytes(byte[] bytes)

获取随机一个 byte 数组,直接改变传入值

SecureRandom random = new SecureRandom();
byte[] test = new byte[20];
random.nextBytes(test);

generateSeed(int numBytes)

这个数组中的数通常可以用来做其他随机生成器的种子

byte seed[] = random.generateSeed(20);

参考

SecureRandom - 码农教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值