CNGKey.Create 不会坚持
CNGKey.Create won't persist
我正在玩 CNGKey
和存储。我想存储密钥,稍后检索它进行加密。
我正在使用 CngKey.Create
,我看到它保存在文件系统中。为了测试对它的访问,在创建命令之后,我立即使用 visual studio 的 'watch' window 得到 CngKey.Exists
m 的错误。
对于使用 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));
我正在玩 CNGKey
和存储。我想存储密钥,稍后检索它进行加密。
我正在使用 CngKey.Create
,我看到它保存在文件系统中。为了测试对它的访问,在创建命令之后,我立即使用 visual studio 的 'watch' window 得到 CngKey.Exists
m 的错误。
对于使用 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));