C#线程安全中的BouncyCastle的SecureRandom?

问题描述:

答案显然是yes在Java实现,但如何Org.BouncyCastle.Security.SecureRandom在C#中?C#线程安全中的BouncyCastle的SecureRandom?

+0

相关(因为它也是关于如何正确使用此类无证基础):https://*.com/q/46792373/1709587 –

因为,据我所知,目前还没有正式的(甚至任何)C#充气城堡端口的文件 - 所有我们能做的就是看源代码,并试图得出一些结论。这里是SecureRandom的源代码。我们可以看到主要的方法有NextCounterValue(用于生成种子)和NextBytes用于生成实际的随机数据。 NextCounterValue是线程安全的(使用Interlocked.Increment)。 NextBytes将实施转发到IRandomGenerator的实例。既然你可以传递任何IRandomGenerator实例的SecureRandom构造 - 我们可以断定,它的线程安全取决于的IRandomGenerator使用。

还当上完整的.NET框架,SecureRandom使用CryptoApiRandomGenerator作为主发生器(生成种子)以及一个只是包装器.NET RNGCryptoServiceProvider正如我们所知道的是线程安全的。

如果你只是创建SecureRandom不传递任何IRandomGenerator?然后,它会创建的DigestRandomGeneratorcode)实例,它似乎是线程安全的(使用简单lockNextBytes)。

总而言之,如果您未通过IRandomGenerator的线程安全的实例,则可以说SecureRandom是线程安全的。