簡體   English   中英

在/ dev / random上多次調用Java SecureRandom.getInstance和nextBytes?

[英]Does calling Java SecureRandom.getInstance and nextBytes multiple times block on /dev/random?

我有一個方法被稱為N次文件加密。 在方法中,這是我創建鹽的方式:

public void method(...){
      ...
      byte[] salt = new byte[8];
      SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG", 
          "SUN");
      secureRandom.nextBytes(salt);
      ...
}

我讀到,當你調用nextBytes時,SecureRandom對象被播種,並且在你第一次調用nextBytes時只會阻塞/ dev / random,因為類的變量seedGenerator是靜態的( https://www.cigital.com/blog/securerandom-實施/ )。

SecureRandom.getInstance(String algorithm,String provider)上的JavaDocs說:返回的SecureRandom對象尚未播種。 要為返回的對象設定種子,請調用setSeed方法。 如果未調用setSeed,則對nextBytes的第一次調用將強制SecureRandom對象自行播種。 如果先前調用了setSeed,則不會發生這種自播種。

我的問題是,如果我繼續創建SecureRandom實例並調用nextBytes,我的代碼是否會阻塞/ dev / random?

提前致謝!

/dev/random的第一次調用可能會阻塞,直到有足夠的熵可用,這意味着如果您不手動播種,則對nextBytes()的第一次調用可能會阻塞。 后續調用永遠不應該阻塞,因為無論SecureRandom的實現方式如何,一旦獲得了熵,它就不會消失,因此/dev/random后續讀取不會阻塞(即一旦第一次讀取/dev/random成功就沒有后續讀取/dev/random應該因缺少熵而失敗)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM