使用nShield HSM的.Net加密服务提供程序错误

时间:2014-04-07 14:51:11

标签: c# cryptography cryptoapi nshield

我正在尝试使用Thales的nShield来生成一对非对称密钥。 我在msdn上找到了以下example

CspParameters csp = new CspParameters(1, "eToken Base Cryptographic Provider");
csp.Flags = CspProviderFlags.UseDefaultKeyContainer;
try
{
    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(csp); 
            key = rsa.ToXmlString(true);

}
catch(Exception ex )
{
    string s = ex.Message;
}

我可以使用KeySafe在HSM上成功连接并生成密钥对。 上面的代码抛出以下异常:

System.Security.Cryptography.CryptographicException      
"Invalid Signature."    System.Security.Cryptography.CryptographicException

我觉得我没有在CspParameters构造函数中设置正确的第二个参数。这就是它在示例中所说的内容:

 // The 1st parameter comes from HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider Types. 
 // The 2nd parameter comes from HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider.

我没有看到任何nCipher或nShield或Thales或类似的东西。

修改

工作测试:

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(csp);
byte[] data = Encoding.ASCII.GetBytes("string");
byte[] enc = rsa.Encrypt(data, false);
String dec = Encoding.ASCII.GetString(rsa.Decrypt(enc, false));
key = rsa.ToXmlString(true);

1 个答案:

答案 0 :(得分:1)

您需要运行位于“开始”>下的nCipher CSP安装向导。所有程序> nCipher,以便在您的操作系统中注册nCipher CSP。之后提到的注册表项将可用,您将能够从中读取确切的CSP名称。