Я играю с CNGKey
и хранилищем. Я хотел бы сохранить ключ, а затем получить его для шифрования. Я делаю CngKey.Create
и вижу, что оно сохраняется в файловой системе. Чтобы проверить доступ к нему, сразу после команды Create я получаю false для CngKey.Exists
(проверено из окна Visual Studio 'watch'). Это происходит как для RSA (используя встроенный Microsoft), так и для 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, но получаю исключение «пара ключей не существует»