次のコードを使用して、公開鍵と秘密鍵をコンテナに保存しようとしています:
CspParameters cp = new CspParameters();
cp.KeyContainerName = "Test";
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp);
私が知りたいのは、コンテナの場所です。コンテナの場所はファイル システムですか?
次のコードを使用して、公開鍵と秘密鍵をコンテナに保存しようとしています:
CspParameters cp = new CspParameters();
cp.KeyContainerName = "Test";
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp);
私が知りたいのは、コンテナの場所です。コンテナの場所はファイル システムですか?
キー ファイルは、次のディレクトリ (*) にあります。
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