[英]Is BouncyCastle's SecureRandom in C# threadsafe?
據我所知,由於沒有C#Bouncy Castle端口的官方(甚至任何)文檔 - 我們所能做的就是查看源代碼並嘗試得出一些結論。 這是SecureRandom的源代碼。 我們可以看到主要方法有NextCounterValue
(用於生成種子)和NextBytes
用於生成實際的隨機數據。 NextCounterValue
是線程安全的(使用Interlocked.Increment
)。 NextBytes
將實現轉發給IRandomGenerator
實例。 由於您可以將任何IRandomGenerator
實例IRandomGenerator
給SecureRandom
構造函數 - 我們可以得出結論,它的線程安全性取決於所使用的IRandomGenerator
線程安全性。
此外,在完整的.NET Framework上, SecureRandom
使用CryptoApiRandomGenerator作為主生成器(生成種子),而且只是.NET RNGCryptoServiceProvider
包裝,我們知道它是線程安全的。
如果您只是在不傳遞任何IRandomGenerator
情況下創建SecureRandom
,該IRandomGenerator
辦? 然后它將創建DigestRandomGenerator
( 代碼 )的實例,它似乎是線程安全的(在NextBytes
使用簡單lock
)。
總而言之,如果你沒有傳遞一個IRandomGenerator
不是線程安全的IRandomGenerator
實例,我們可以說SecureRandom
是線程安全的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.