我使用以下代码创建了一个RSA密钥容器。密钥在容器中创建,我可以在容器中成功加密/解密。
public static void CreateKeyContainer()
{
RSACryptoServiceProvider rsa = null;
try
{
var cryptoParameters = new CspParameters();
cryptoParameters.KeyContainerName = "MyContainer";
cryptoParameters.Flags = CspProviderFlags.UseMachineKeyStore;
rsa = new RSACryptoServiceProvider(2048, cryptoParameters);
}
finally
{
if (rsa != null)
{
rsa.Clear();
rsa.Dispose();
}
}
}
在调用CreateKeyContainer方法之前,我想确保指定容器中的键是否已存在。我已将标志更改为CpsProviderFlags.UseExistingKey。
public static bool CheckIfKeysExist()
{
RSACryptoServiceProvider rsa = null;
try
{
var cryptoParameters = new CspParameters();
cryptoParameters.KeyContainerName = "MyContainer";
cryptoParameters.Flags = CspProviderFlags.UseExistingKey;
rsa = new RSACryptoServiceProvider(2048, cryptoParameters);
}
catch (Exception ex)
{
return false;
}
finally
{
if (rsa != null)
{
rsa.Clear();
rsa.Dispose();
}
}
return true;
}
但是,通过执行此方法,无论密钥容器是否存在,它都会抛出“密钥集不存在”的加密异常。
如何检查密钥容器是否已存在?
答案 0 :(得分:0)
由于您要在机器密钥库中创建密钥,请设置Flags属性,如下所示:
cryptoParameters.Flags = CspProviderFlags.UseExistingKey | | CspProviderFlags.UseMachineKeyStore;