2

.Net で作成された新しいアプリケーションがあります。VB6 で記述され、C++ DLL を使用する、(当面の間) 維持する必要があるアプリケーションのレガシー バージョンもあります。特定の C++ ネイティブ DLL は、P/Invoke を介して新しい .Net アプリケーションで引き続き使用および共有する必要があります。

レガシ アプリは現在、乱数ジェネレーターを利用していますが、Win32 API を通じて利用可能な CryptGenRandom() 関数を使用するように置き換えられます。新しい .Net アプリにも同じニーズがあり、RNGCryptoServiceProvider クラスを利用できます。

質問: 内部では、.Net RNGCryptoServiceProvider クラスは Win32 CryptGenRandom() 関数を利用していますか? もしそうなら、これに関して利用可能なドキュメントのリンクに興味があります。

4

1 に答える 1

2

実際、.NetRNGCryptoServiceProviderクラスは「Cryptographic Service Provider」(CSP) からランダム データを取得します (ドキュメントにはそう書かれています)。CryptoAPI では、CSP はいくつかの暗号化サービスを提供するロード可能な DLL であり、主に秘密鍵の格納、署名の計算、および乱数の生成を行います。CSP は、(Microsoft によって) 署名され、(いくつかの特定のレジストリ キーに書き込むことによって) 登録されている場合にのみ使用できます。

このCryptGenRandom()関数は、デフォルトの CSP (デフォルトで使用されるように登録されているもの、通常はオペレーティング システム自体に付属する CSP の 1 つ) を使用し、CPGenRandom()その CSP で関数を呼び出します。RNGCryptoServiceProvider同じことをします。したがって、それはを呼び出しませCryptGenRandom()が、同じ暗号的に強力なソースをフィードします。

于 2010-11-24T22:14:22.623 に答える