You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS7下Java8/11哪种urandom配置是正确的非阻塞SecureRandom算法

路径写法差异导致算法不同的原因

Java的Sun/OpenJDK安全提供者对NativePRNG算法的加载逻辑做了硬编码字符串匹配:只有当java.security.egd或者securerandom.source的配置值完全等于file:/dev/urandom或者file:/dev/random字符串时,才会加载NativePRNG算法,直接调用操作系统的对应设备生成随机数。
/dev/./urandom虽然经过系统路径解析后和/dev/urandom指向同一个文件,但字符串本身和硬编码的匹配规则不一致,因此不会触发NativePRNG的加载逻辑,JDK会回退使用版本默认的SecureRandom算法:

  • Java 8版本默认回退为SHA1PRNG算法
  • Java 11及更高版本默认回退为DRBG算法

非阻塞随机数的配置选择

测试中出现的三种算法均可以实现非阻塞,区别如下:

  • NativePRNG:直接读取系统/dev/urandom生成随机数,天生非阻塞,不会出现随机数熵不足导致的进程挂起问题
  • SHA1PRNG:算法本身是非阻塞的,只要种子来源配置为/dev/./urandom,就不会读取阻塞的/dev/random设备。早年Java版本存在/dev/urandom会被自动替换为/dev/random的bug,因此开发者普遍用/dev/./urandom绕开这个问题,通过SHA1PRNG实现非阻塞
  • DRBG:Java 9+引入的新默认算法,符合NIST安全标准,性能和安全性都优于旧算法,只要种子源是urandom类路径,同样是非阻塞的

当前主流场景下的推荐配置:

  1. 如果你使用Java 8版本:可以任选-Djava.security.egd=file:/dev/./urandom走SHA1PRNG,或者-Djava.security.egd=file:/dev/urandom走NativePRNG,两者都是非阻塞的
  2. 如果你使用Java 11及更高版本:更推荐用-Djava.security.egd=file:/dev/./urandom走默认的DRBG算法,安全性和性能表现更优

内容的提问来源于stack exchange,提问作者SAGAR BHOOSHAN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:24:03