简介

  • 之前我们学习了Random的代码,但是其只是个伪随机数。
  • 什么是伪随机数:Random随机数是有规律的,只要两个Random对象的种子相同,而且方法的调用顺序也相同,产生的随机数相同。
  • 有伪随机数,就有真随机数。实际上真正的真随机数只能通过量子力学原理来获取,而我们想要的是一个不可预测的安全的随机数,SecureRandom就是用来创建安全的随机数的
  • SecureRandom无法指定种子,它使用RNG(random number generator)算法。JDK的SecureRandom实际上有多种不同的底层实现,有的使用安全随机种子加上伪随机数算法来产生安全的随机数,有的使用真正的随机数生成器。实际使用的时候,可以优先获取高强度的安全随机数生成器,如果没有提供,再使用普通等级的安全随机数生成器

    实例

    ```java public class SecureRandomTest { public static void main(String[] args) {
    1. SecureRandom sr = null;
    2. try {
    3. // 获取高强度安全随机数生成器
    4. sr = SecureRandom.getInstanceStrong();
    5. } catch (NoSuchAlgorithmException e) {
    6. // 获取普通的安全随机数生成器
    7. sr = new SecureRandom();
    8. }
    9. byte[] buffer = new byte[16];
    10. // 用安全随机数填充buffer
    11. sr.nextBytes(buffer);
    12. System.out.println(Arrays.toString(buffer));
    } }

```

推荐阅读