C#中的RSACryptoServiceProvider:如何检查是否一个键已经存在于容器?容器、RSACryptoServiceProvider

2023-09-06 15:32:13 作者:趁早放手

我建立了多个客户端之间的安全通信的应用程序。为了做到这一点,我加密与AES的消息,然后我加密AES密钥与收件人的RSA公钥,然后我送这两个组件(RSA加密AES密钥和AES加密的消息)给收件人。整个过程运作良好,并没有任何错误。

I'm building an application for secure messaging between multiple clients. In order to achieve that, I encrypt the message with AES, then I encrypt the AES key with the recipients public RSA key, then I send these two components (RSA-encrypted AES key and AES-encrypted message) to the recipient. The whole process works well and without any errors.

现在我遇到了一个问题,我不知道什么是最好的做法:为了持续1 participent的私钥和公钥,我需要存储的密钥对。地方保存为XML文件是可能的,但显然不是一个选项。所以决定用这里描述一个关键的容器。中实现用容器是很容易的,但我怎么能

Now I ran into a problem and I'm wondering what would be the best practice: In order to persist the private and public key of one participent, I need to store the key pair. Saving it somewhere as an XML file is possible, but obviously not an option. So decided to use a key container as described here. Implementing the use of the container is quite easy, but how can I

检查是否在指定的容器已经存在? 检查密钥大小的给定值匹配?

据我可以看到这是不可能的,因为的RSACryptoServiceProvider生成一个新的密钥,如果容器不存在 - 瞒着左右。但我需要知道,如果有一个previously存储密钥对现有或创建一个新的。

As far as I can see this is not possible, because the RSACryptoServiceProvider generates a new key if the container does not exist - without telling so. But I need to know if there is a previously stored key pair available or if a new one is created.

我该如何解决呢?或者,这是一个完全错误的做法? 非常感谢您对这种帮助!

How can I fix that? Or is this a completely wrong approach? Thanks for your help on that!

问候, 罗布

推荐答案

试试这个:

    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;
    }

similiar问题:How检查是否在.NET