使用 SecureRandom 产生随机数原理和问题

SecureRandom.getInstanceStrong() 方法使用的是, linux 环境下使用 /dev/random 生成的种子。而/dev/random 是一个阻塞数字生成器,如果没有足够的熵,它就一直等,这迫使 JVM 等待。熵是指键盘和鼠标输入以及磁盘活动可以产生所需的随机性。Linux 内核采用熵来描述数据的随机性,

该接口会返回指定字节数的随机数。random 设备了提供了 2 个字符设备供用户态进程使用——/dev/random 和/dev/urandom:

  • /dev/random 适用于对随机数质量要求比较高的请求,在熵池中数据不足时, 读取 dev/random 设备时会返回小于熵池噪声总数的随机字节。/dev/random 可生成高随机性的公钥或一次性密码本。若熵池空了,对/dev/random 的读操作将会被阻塞,直到收集到了足够的环境噪声为止。这样的设计使得/dev/random 是真正的随机数发生器,提供了最大可能的随机数据熵。
  • /dev/urandom,非阻塞的随机数发生器,它会重复使用熵池中的数据以产生伪随机数据。这表示对/dev/urandom 的读取操作不会产生阻塞,但其输出的熵可能小于/dev/random 的。它可以作为生成较低强度密码的伪随机数生成器,对大多数应用来说,随机性是可以接受的。
  • SecureRandom.getInstanceStrong() 使用 /dev/random 会产生阻塞。
  • new SecureRandom() 使用 /dev/urandom 生成种子,不会产生阻塞。

SecureRandom.getInstanceStrong() 会在什么情况下抛出NoSuchAlgorithmException异常?/dev/random不存在的时候吗

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值