2014-04-07 34 views
2

我想从Thales使用nShield生成一对非对称密钥。 我发现MSDN上的以下example.Net加密服务提供商错误使用nShield HSM

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或泰勒斯或类似的有什么。

编辑:

工作测试:

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

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

+0

虽然调用rsa.ToXmlString(true)我得到一个“拒绝访问错误”,我将如何指定HSM不存储密钥? – AlexandruC

+1

这是HSM提供安全密钥存储的主要功能之一。如果你不想存储密钥,你为什么要使用HSM? – jariq

+0

我只希望它为我生成它们,我会以另一种方式来存储它们,它们将以不同的方式使用。 – AlexandruC

相关问题