1. 程式人生 > >SecureRandom生成隨機數超慢i及其解決方法

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()