2016-07-28 152 views
27

我在.NetCore中找不到System.Security.Cryptography.RNGCryptoServiceProvider类。.Net Core中的RNGCryptoServiceProvider

对于我正试图从.Net Framework移植的应用程序来说,它非常重要,因为它正在用于生成一个用于加密的初始化向量。

它是以不同的名称存在,还是有另一种实现此功能的方式?

回答

8

一种建议解决方案是使用RandomNumberGenerator.Create() https://github.com/dotnet/corefx/issues/2881

+1

这可能是正确的答案,但您需要指定*为什么*是这种情况。例如。 'RandomNumberGenerator'是否返回密码安全的随机数?如果是这样,为什么和如何?请注意,只有链接的答案通常是“皱眉”。 –

44

System.Security.Cryptography.RandomNumberGenerator为密码安全伪随机数发生器(CSPRNG)实现的基类。在.NET Framework中,RandomNumberGenerator.Create()返回RNGCryptoServiceProvider实例(除非由CryptoConfig进行了不同配置)。在.NET Core RandomNumberGenerator.Create()中返回一个基于BCryptGenRandom(Windows)或OpenSSL的随机数生成器(!Windows)的不透明类型。

RandomNumberGenerator.Create()是在.NET Core上获得RNG实例的唯一方式,因为它既可以在.NET Core上运行,也可以在.NET Framework上运行。

当然,如果你正在生成一个IV,你也可以调用实例方法SymmetricAlgorithm.GenerateIV()让它在内部使用CSPRNG;尽管正如文档所述,调用它是不必要的,因为随着实例创建了一个随机IV(在下一次调用CreateEncryptor之前,可以使用GenerateIV强制它生成一个新的)。