【问题标题】:Check existing RSA Key Container检查现有的 RSA 密钥容器
【发布时间】:2015-12-04 11:17:20
【问题描述】:

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

但是,通过执行此方法,它总是抛出“Keyset 不存在”的 Cryptographic Exception,而不管密钥容器是否存在。

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

【问题讨论】:

    标签: c# encryption rsa


    【解决方案1】:

    由于您是在机器密钥存储中创建密钥,因此请设置 Flags 属性,如下所示:

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

    【讨论】:

    • 使用一个 |对于二进制或
    • 问题是如果不存在就会抛出异常。有什么方法可以告诉而不抛出异常?我的意思是我可以捕获异常并返回一个布尔值,但我真的不想诉诸于此。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 2011-02-24
    • 2012-09-13
    • 1970-01-01
    • 2014-04-08
    • 2011-11-06
    相关资源
    最近更新 更多