安全随机类:SecureRandom

2023-10-30


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 - 码农教程

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

安全随机类:SecureRandom 的相关文章

随机推荐