2016-07-28 8 views
27

.NetCoreでSystem.Security.Cryptography.RNGCryptoServiceProviderクラスが見つかりません。.Net CoreのRNGCryptoServiceProvider

私は、暗号化のための初期化ベクトルを生成するために使用されているので、私は.Net Frameworkから移植しようとしているアプリケーションに不可欠です。

この名前は別の名前で存在するのですか、それともこの機能を実現する別の方法ですか?提案ソリューションの

答えて

8

つRandomNumberGenerator.Createを(使用する場合)

https://github.com/dotnet/corefx/issues/2881
+1

これはおそらく正解ですが、* why *を指定する必要があります。例えば。 'RandomNumberGenerator'は暗号で安全な乱数を返しますか?そしてもしそうなら、なぜ、どのように?リンクのみの回答は一般的には「悩まされる」ことに注意してください。 –

44

System.Security.Cryptography.RandomNumberGeneratorは暗号的に安全な疑似乱数生成器(CSPRNG)の実装の基本クラスです。 .NET FrameworkのRandomNumberGenerator.Create()は、の設定が異なる場合を除き、RNGCryptoServiceProviderインスタンスを返します。 .NETコアでRandomNumberGenerator.Create()は、BCryptGenRandom(Windows)またはOpenSSLの乱数ジェネレータ(!Windows)に基づく不透明型を返します。

RandomNumberGenerator.Create()は.NETコアでRNGインスタンスを取得する唯一の方法であり、.NET Coreと.NET Frameworkの両方で動作するため、最も移植性があります。

もちろん、IVを生成している場合は、インスタンスメソッドSymmetricAlgorithm.GenerateIV()を呼び出して、CSPRNGを内部的に使用することもできます。ドキュメンテーションによれば、ランダムなIVがインスタンスと共に作成されるので、それを呼び出すことは不要です(GenerateIVを使用して、次の呼び出しの前に新しいインスタンスを生成することができます。CreateEncryptor)。