2011-12-31 75 views
1

我希望在Java中使用SecureRandom生成隨機整數。在java中播種安全隨機

private SecureRandom myRandom = new SecureRandom(); 
private int myInt = 10; 
int myResults; 
myResults = myRandom.nextInt(myInt); 

據我所知,播種意味着指定隨機數發生器的起點。在每次迭代之後,我會將隨機數發生器重新排列以確保隨機性?

回答

3

不會。如果您第一次沒有提供種子,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

+0

這個答案是錯誤的。在某些情況下再播種更安全。 https://www.cigital.com/justice-league-blog/2009/08/14/proper-use-of-javas-securerandom/ – Jacob 2013-11-20 22:39:35

+0

@Jacab感謝您的輸入...我已更新我的回答 – artbristol 2013-11-21 09:06:26

+0

文章引用已轉移到https://www.synopsys.com/blogs/software-security/proper-use-of-javas-securerandom/ – 2017-07-11 23:05:45