C#RSA KeyContainer存在

时间:2015-09-11 11:49:20

标签: c# encryption

使用aspnet_regiis工具加密web.config时,密钥conatiner存储在 C:\ ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys 的MachineKeys文件夹中。

如何检查具有特定名称的密钥容器是否已存在?那是 配置是否第一次成功加密?

显然我试过

 public static bool DoesKeyExists(string containerName)
 {
     var cspParams = new CspParameters
     {
         Flags = CspProviderFlags.UseExistingKey,
         KeyContainerName = containerName
     };

     try
     {
         var provider = new RSACryptoServiceProvider(cspParams);
     }
     catch (Exception e)
     {
         return false;
     }
     return true;
 }

并且对方法的调用就像

if (!DoesKeyExists("MyKeys"))
{
     p.StandardInput.WriteLine("aspnet_regiis.exe -pc \"MyKeys\" -exp");
     p.StandardInput.WriteLine("aspnet_regiis.exe -pa \"MyKeys\" \"NT AUTHORITY\\NETWORK SERVICE\"");
     p.StandardInput.WriteLine("aspnet_regiis.exe -pa \"MyKeys\" \"IIS APPPOOL\\ApplicationPoolName\"");
     p.StandardInput.WriteLine("aspnet_regiis -pef \"connectionStrings\" {0} -prov \"RSAProtectedConfigurationProvider\"", strEntry);
    p.StandardInput.WriteLine("aspnet_regiis -px \"MyKeys\" {0} -pri", KeyFileName);
}

但即使在第一次运行时创建密钥容器本身也是如此 它说 密钥集不存在并抛出错误,然后为后续运行返回false。

应该做什么?

0 个答案:

没有答案