SecureRandom生成随机数超慢i及其解决方法

原文如下:https://blog.csdn.net/upshi/article/details/54907464

有2种解决方案:

方法1:在Tomcat环境中:

    可以通过配置JRE使用非阻塞的 Entropy Source: 
 在catalina.sh中加入这么一行:

-Djava.security.egd=file:/dev/./urandom 

即可。 
加入后再启动Tomcat,整个启动耗时下降到Server startup in 20130 ms。 
这种方案是在修改随机数获取方式,那这里urandom是啥呢?

/dev/random的一个副本是/dev/urandom(“unblocked”,非阻塞的随机数发生器[4]),它会重复使用熵池中的数据以产生伪随机数据。这表示对/dev/urandom的读取操作不会产生阻塞,但其输出的熵可能小于/dev/random的。它可以作为生成较低强度密码的伪随机数生成器,不建议用于生成高强度长期密码。 - - - wikipedia


方法2:在JVM环境中解决 


打开$JAVA_PATH/jre/lib/security/java.security这个文件,找到下面的内容:

securerandom.source=file:/dev/random

替换成

securerandom.source=file:/dev/./urandom

另外,对于 JDK8中的SecureRandom.getInstanceStrong() ,也会有类似的问题。详见 http://hongjiang.info/java8-nativeprng-blocking/解决方法如下

  使用下面的调用

SecureRandom.getInstance("NativePRNGNonBlocking")

而不能使用如下带缺省参数的调用。

SecureRandom.getInstanceStrong()

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值