【问题标题】:How to persistant key using KSP in .net?如何在 .net 中使用 KSP 持久化密钥?
【发布时间】:2021-01-09 04:40:39
【问题描述】:

我正在使用 WPF 制作应用程序,我想使用 Window 的 CNG。但是,我在存储非对称密钥时遇到问题,以便它在不同的会话中持续存在。我想制作密钥,以便公钥和私钥不会改变。我该怎么办?

我一直在尝试使用 KSP 来存储密钥,但还没有找到如何正确访问和使用它。任何密钥存储方法都有效(只要它是安全的),所以我不依赖于 KSP。我环顾四周寻找答案,但找不到任何给出明确解释的答案。

编辑:我应该提一下,虽然 CngKey.Create(name) 的 Microsoft 文档会创建一个持久密钥,但它似乎不起作用。当我再次尝试使用密钥时,我的公钥和私钥值会发生变化。

【问题讨论】:

    标签: .net security key


    【解决方案1】:

    经过大量试验和错误后,我发现这是我的密钥生成问题。我会把代码贴在这里,以防其他人有类似的问题。

    以下代码示例将使用 KSP 创建和存储 CngKey 以用于 RSA 算法:

        CngKey key;
        bool keyExists = CngKey.Exists(KEY_NAME);
        if (!keyExists)
        {
            CngKeyCreationParameters parameters = new CngKeyCreationParameters()
            {
                ExportPolicy = CngExportPolicies.AllowPlaintextExport,
                Provider = CngProvider.MicrosoftSoftwareKeyStorageProvider,
                KeyUsage = CngKeyUsages.AllUsages
            };
            CngProperty property = new CngProperty("Length", BitConverter.GetBytes(RSA_KEY_SIZE), CngPropertyOptions.None);
            parameters.Parameters.Add(property);
    
    key = CngKey.Create(CngAlgorithm.Rsa, KEY_NAME, parameters);
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 2020-04-16
      • 2017-12-26
      • 1970-01-01
      • 2012-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多