我希望在Java中使用SecureRandom生成隨機整數。在java中播種安全隨機
private SecureRandom myRandom = new SecureRandom();
private int myInt = 10;
int myResults;
myResults = myRandom.nextInt(myInt);
據我所知,播種意味着指定隨機數發生器的起點。在每次迭代之後,我會將隨機數發生器重新排列以確保隨機性?
我希望在Java中使用SecureRandom生成隨機整數。在java中播種安全隨機
private SecureRandom myRandom = new SecureRandom();
private int myInt = 10;
int myResults;
myResults = myRandom.nextInt(myInt);
據我所知,播種意味着指定隨機數發生器的起點。在每次迭代之後,我會將隨機數發生器重新排列以確保隨機性?
不會。如果您第一次沒有提供種子,SecureRandom會自行播種,如果它使用的是僞隨機生成器,則隨後的隨機數將不可預知。事實上,如果你試圖重新編制它,你可能會降低生成的隨機數的安全性,因爲你必須從某個地方獲得新的種子(並且這可能不是一個好的來源隨機性作爲SecureRandom的實現)。
據https://www.synopsys.com/blogs/software-security/proper-use-of-javas-securerandom/,如果你正在使用的SecureRandom的大若干個隨機數,你應該定期補種,所以無論是
定期扔掉現有java.security.SecureRandom中 實例並創建一個新的。這將會產生一個新的實例,並帶有一個新種子 。
java.security.SecureRandom.setSeed(java.security.SecureRandom.generateSeed(int))通過調用 定期向PRNG種子添加新的隨機素材。
但是不需要在每次調用後重新設置它。
注意SecureRandom
的API是由於在Java中8澄清:http://openjdk.java.net/jeps/123
這個答案是錯誤的。在某些情況下再播種更安全。 https://www.cigital.com/justice-league-blog/2009/08/14/proper-use-of-javas-securerandom/ – Jacob 2013-11-20 22:39:35
@Jacab感謝您的輸入...我已更新我的回答 – artbristol 2013-11-21 09:06:26
文章引用已轉移到https://www.synopsys.com/blogs/software-security/proper-use-of-javas-securerandom/ – 2017-07-11 23:05:45