11

次のコードを使用して、公開鍵と秘密鍵をコンテナに保存しようとしています:

CspParameters cp = new CspParameters();
cp.KeyContainerName = "Test";
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp);

私が知りたいのは、コンテナの場所です。コンテナの場所はファイル システムですか?

4

2 に答える 2

22

キー ファイルは、次のディレクトリ (*) にあります。

Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), 
    @"Microsoft\Crypto\RSA\MachineKeys")

次のように、特定のキーのファイル名を取得できます。

CspParameters cp = ...;
CspKeyContainerInfo info = new CspKeyContainerInfo(cp);
string fileName = info.UniqueKeyContainerName;

この情報が文書化されているとは思わないので、それを使用すると、文書化されていない実装の詳細に依存することになり、Windows の将来のバージョンでは機能しない可能性があります。残念ながら、それを使用する必要がある場合があります。たとえば、この質問に記載されているように、非特権アカウントから RSA キー コンテナーのアクセス許可を表示する信頼できる方法は他にないと思います。

(*) マシンキー用です。ユーザー固有のキーはおそらく下にありますEnvironment.SpecialFolder.LocalApplicationData

于 2012-05-21T18:10:30.140 に答える