C# 打开加密密钥在Powershell中有效,而不是在C中#
我正在打开存储在HSM中的加密密钥。我的机器上安装了HSM的客户端库。如果运行以下Windows Powershell代码段:C# 打开加密密钥在Powershell中有效,而不是在C中#,c#,powershell,cng,C#,Powershell,Cng,我正在打开存储在HSM中的加密密钥。我的机器上安装了HSM的客户端库。如果运行以下Windows Powershell代码段: ##Open an existing Key $keyName = 'foo' $providername = 'SafeNetProtectApp Key Storage Provider' $provider = New-Object 'System.Security.Cryptography.CngProvider' -ArgumentList $provider
##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#代码段:
我不明白为什么我可以在Powershell中使用相同的库打开密钥而不会出现问题。在同一台机器上,如果我尝试在C#中执行该操作,我会得到一个异常。有人能解释为什么会这样吗
其他事实
- 项目不以.NET核心为目标
- 在Visual Studio 2017 Shell中编译C#控制台应用程序
谢谢大家的帮助 您从何处获得此提供程序:SafeNetProtectApp密钥存储提供程序密钥存储提供程序您安装了一个CNG提供程序。您是否在visual studio中编译它?看起来您需要为该提供程序添加对DLL的引用。我是。在VS 2017 shell中编译。所以,我也这么想。问题,为什么我不需要在Posh中引用提供程序DLL,但我需要w/C?我遇到了一个关于“未知错误”-1073741823“的错误,在找到您的答案之前,我无法找出错误所在。谢谢:)
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)