簡體   English   中英

BouncyCastle在C#threadsafe中的SecureRandom?

[英]Is BouncyCastle's SecureRandom in C# threadsafe?

對於Java中的實現,答案顯然是肯定的,但C#中的Org.BouncyCastle.Security.SecureRandom怎么樣?

據我所知,由於沒有C#Bouncy Castle端口的官方(甚至任何)文檔 - 我們所能做的就是查看源代碼並嘗試得出一些結論。 這是SecureRandom的源代碼。 我們可以看到主要方法有NextCounterValue (用於生成種子)和NextBytes用於生成實際的隨機數據。 NextCounterValue是線程安全的(使用Interlocked.Increment )。 NextBytes將實現轉發給IRandomGenerator實例。 由於您可以將任何IRandomGenerator實例IRandomGeneratorSecureRandom構造函數 - 我們可以得出結論,它的線程安全性取決於所使用的IRandomGenerator線程安全性。

此外,在完整的.NET Framework上, SecureRandom使用CryptoApiRandomGenerator作為主生成器(生成種子),而且只是.NET RNGCryptoServiceProvider包裝,我們知道它是線程安全的。

如果您只是在不傳遞任何IRandomGenerator情況下創建SecureRandom ,該IRandomGenerator辦? 然后它將創建DigestRandomGenerator代碼 )的實例,它似乎是線程安全的(在NextBytes使用簡單lock )。

總而言之,如果你沒有傳遞一個IRandomGenerator不是線程安全的IRandomGenerator實例,我們可以說SecureRandom是線程安全的。

暫無
暫無

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

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