在 Powershell 中打开加密密钥,而不是在 C# 中
Opening Encryption Key Works in Powershell Not in C#
我正在打开存储在 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 为目标
- 在 Visual Studio 2017 Shell
中编译 C# 控制台应用程序
我编写的项目针对的是错误的处理器架构。提供程序库是 64 位的,但我的项目是针对 32 位的。我将我的项目更改为以 64 位可执行文件为目标,它成功了。
感谢大家的帮助!
我正在打开存储在 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 为目标
- 在 Visual Studio 2017 Shell 中编译 C# 控制台应用程序
我编写的项目针对的是错误的处理器架构。提供程序库是 64 位的,但我的项目是针对 32 位的。我将我的项目更改为以 64 位可执行文件为目标,它成功了。
感谢大家的帮助!