![](/img/trans.png)
[英]How to get the same result in c# with SecureRandom.getInstance("SHA1PRNG") in java
[英]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.