检查现有的RSA密钥容器

时间:2015-12-04 11:17:21

标签: c# encryption rsa

我使用以下代码创建了一个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;
    }

但是,通过执行此方法,无论密钥容器是否存在,它都会抛出“密钥集不存在”的加密异常。

如何检查密钥容器是否已存在?

1 个答案:

答案 0 :(得分:0)

由于您要在机器密钥库中创建密钥,请设置Flags属性,如下所示:

cryptoParameters.Flags = CspProviderFlags.UseExistingKey | | CspProviderFlags.UseMachineKeyStore;