Я открываю ключ шифрования, хранящийся в HSM.На моем компьютере установлена клиентская библиотека HSM.Если я запускаю следующий фрагмент Windows Powershell:
##Open an existing Key
$keyName = 'foo'
$providername = 'SafeNetProtectApp Key Storage Provider'
$provider = New-Object 'System.Security.Cryptography.CngProvider' -ArgumentList $providername
$key = [System.Security.Cryptography.CngKey]::Open($keyName, $provider)
Это работает.
Если я пытаюсь скомпилировать следующий фрагмент C #:
using System.Security.Cryptography;
namespace SaveSecret
{
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine(">>> Starting application <<<");
string keyName = "foo";
string providerName = "SafeNetProtectApp Key Storage Provider";
CngProvider provider = new CngProvider(providerName);
CngKey key = null;
key = CngKey.Open(keyName, provider);
System.Console.Write("[Hit Enter to Continue]");
System.Console.ReadLine();
}
}
}
, я получаю следующееисключение:
System.Security.Cryptography.CryptographicException
HResult=0x8009001E
Message=Provider DLL could not be found.
Source=System.Core
StackTrace:
at System.Security.Cryptography.NCryptNative.OpenStorageProvider(String providerName)
at System.Security.Cryptography.CngKey.Open(String keyName, CngProvider provider, CngKeyOpenOptions openOptions)
at System.Security.Cryptography.CngKey.Open(String keyName, CngProvider provider)
Я запутался, почему я могу без проблем открыть ключ, используя те же библиотеки в Powershell.На той же машине, если я пытаюсь выполнить действие в C #, я получаю исключение.Кто-нибудь может объяснить, почему это происходит?
Дополнительные факты ...
- Проект не нацелен на .NET Core
- Компиляция консольного приложения C # в Visual Studio 2017Shell