C#线程安全中的BouncyCastle的SecureRandom?
问题描述:
答案显然是yes在Java实现,但如何Org.BouncyCastle.Security.SecureRandom
在C#中?C#线程安全中的BouncyCastle的SecureRandom?
答
因为,据我所知,目前还没有正式的(甚至任何)C#充气城堡端口的文件 - 所有我们能做的就是看源代码,并试图得出一些结论。这里是SecureRandom的源代码。我们可以看到主要的方法有NextCounterValue
(用于生成种子)和NextBytes
用于生成实际的随机数据。 NextCounterValue
是线程安全的(使用Interlocked.Increment
)。 NextBytes
将实施转发到IRandomGenerator
的实例。既然你可以传递任何IRandomGenerator
实例的SecureRandom
构造 - 我们可以断定,它的线程安全取决于的IRandomGenerator
使用。
还当上完整的.NET框架,SecureRandom
使用CryptoApiRandomGenerator作为主发生器(生成种子)以及一个只是包装器.NET RNGCryptoServiceProvider
正如我们所知道的是线程安全的。
如果你只是创建SecureRandom
不传递任何IRandomGenerator
?然后,它会创建的DigestRandomGenerator
(code)实例,它似乎是线程安全的(使用简单lock
在NextBytes
)。
总而言之,如果您未通过IRandomGenerator
的线程安全的实例,则可以说SecureRandom
是线程安全的。
相关(因为它也是关于如何正确使用此类无证基础):https://*.com/q/46792373/1709587 –