BouncyCastle在C#threadsafe中的SecureRandom?

对于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是线程安全的。