我正在制作一个使用WPF的应用程序,我想使用Window的CNG。然而,我在存储非对称密钥时遇到了一个问题,这样它就会在不同的会话中持续存在。我希望生成密钥,这样公钥和私钥就不会更改。我该怎么做呢?
我一直在尝试使用KSP来存储密钥,但是还没有发现如何正确地访问和使用它。任何密钥存储方法都可以工作(只要它是安全的),所以我不依赖于KSP。我四处寻找答案,但找不到一个清楚的解释。
编辑:我应该提一下,虽然微软的CngKey.Create(名称)文档会创建一个持久化密钥,但它似乎不起作用。当我再次尝试使用该密钥时,我的公钥和私钥的值都会发生变化。
发布于 2020-09-25 10:23:59
经过大量的试验和错误,我发现这是我的密钥生成的问题。我将在这里发布代码,以防其他人有类似的问题。
下面的代码示例将创建并存储一个带有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);
}https://stackoverflow.com/questions/64020163
复制相似问题