2016-07-28 90 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強制它生成一個新的)。