Открытие ключа шифрования работает в Powershell, а не в C # - PullRequest
0 голосов
/ 18 октября 2018

Я открываю ключ шифрования, хранящийся в 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

1 Ответ

0 голосов
/ 18 октября 2018

Проект, который я написал, был нацелен на неправильную архитектуру процессора.Библиотека провайдера была 64-битной, но мой проект был ориентирован на 32-битную.Я изменил свой проект на 64-битный исполняемый файл, и он работал.

enter image description here

Спасибо за помощь всем!

...