CNGKey.Create 不会坚持

CNGKey.Create won't persist

我正在玩 CNGKey 和存储。我想存储密钥,稍后检索它进行加密。
我正在使用 CngKey.Create,我看到它保存在文件系统中。为了测试对它的访问,在创建命令之后,我立即使用 visual studio 的 'watch' window 得到 CngKey.Existsm 的错误。
对于使用 Microsoft 内置枚举的 RSA 和使用“AES”字符串的 AES,都会发生这种情况。

我的 AES 代码:

CngKeyCreationParameters keyParams = new CngKeyCreationParameters
{
    ExportPolicy = CngExportPolicies.AllowExport,
    KeyCreationOptions = CngKeyCreationOptions.MachineKey | CngKeyCreationOptions.OverwriteExistingKey,
    Provider = CngProvider.MicrosoftSoftwareKeyStorageProvider,
    //KeyUsage = CngKeyUsages.Decryption
};
CngAlgorithm aesAlgorithm = new CngAlgorithm("AES");
CngKey.Create(aesAlgorithm, "mykeyAES", keyParams);

我的 RSA 代码:

CngKeyCreationParameters keyParams = new CngKeyCreationParameters
{
    ExportPolicy = CngExportPolicies.AllowExport,
    KeyCreationOptions = CngKeyCreationOptions.MachineKey | CngKeyCreationOptions.OverwriteExistingKey,
    Provider = CngProvider.MicrosoftSoftwareKeyStorageProvider,
    //KeyUsage = CngKeyUsages.Decryption
};
if (!CngKey.Exists(keyName, CngProvider.MicrosoftSoftwareKeyStorageProvider))
{
    CngKey key = CngKey.Create(CngAlgorithm.Rsa, keyName, keyParams);
}

我从网上搜索得到的唯一相关信息是关于 SO 的相同问题,这对我的具体案例没有太大帮助。 感谢任何帮助!

编辑:

根据@Martheen的回复,Open已经改为:

CngKey key = CngKey.Open(keyName, CngProvider.MicrosoftSoftwareKeyStorageProvider, CngKeyOpenOptions.MachineKey);

我在 CngKey.Exists 上得到 true,但遇到异常 'keypair does not exist'

如果您将密钥创建为机器范围内的密钥,则在访问它们时也必须指定它

CngKey.Exists("mykeyAES", CngProvider.MicrosoftSoftwareKeyStorageProvider, CngKeyOpenOptions.MachineKey));

CngKey.Open("mykeyRSA", CngProvider.MicrosoftSoftwareKeyStorageProvider, CngKeyOpenOptions.MachineKey));