对于Java中的实现,答案显然是yes,但C#中的Org.BouncyCastle.Security.SecureRandom
怎么样?
答案 0 :(得分:3)
据我所知,由于没有关于C#Bouncy Castle端口的官方(甚至任何)文档 - 我们所能做的就是查看源代码并尝试得出一些结论。以下是SecureRandom的源代码。我们可以看到主要方法有NextCounterValue
(用于生成种子)和NextBytes
用于生成实际随机数据。 NextCounterValue
是线程安全的(使用Interlocked.Increment
)。 NextBytes
将实施转发给IRandomGenerator
的实例。由于您可以将IRandomGenerator
的任何实例传递给SecureRandom
的构造函数 - 我们可以得出结论,其线程安全性取决于IRandomGenerator
的使用。
同样在完整的.NET Framework上,SecureRandom
使用CryptoApiRandomGenerator作为主生成器(生成种子),而这只是.NET RNGCryptoServiceProvider
的包装,我们知道这是线程安全
如果您在不传递任何SecureRandom
的情况下创建IRandomGenerator
该怎么办?然后它将创建DigestRandomGenerator
(code)的实例,它似乎是线程安全的(在lock
中使用简单NextBytes
)。
总而言之,如果你没有传递一个对它不是线程安全的SecureRandom
实例,我们可以说IRandomGenerator
是线程安全的。