如何在.net中使用KSP持久化密钥



我正在使用WPF制作一个应用程序,我想使用Window的CNG。然而,我在存储非对称密钥时遇到了问题,因此它会在不同的会话中持续存在。我想制作密钥,这样公钥和私钥就不会更改。我该怎么做?

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

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

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

以下代码示例将创建并存储带有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);
}

最新更新