我正在尝试使用这段代码在C#中使用RSA(CSP中的Exchange密钥)加密symetric密钥(RSA密钥CSP50C8C7CD不可导出,并且它在HSM中):
CspParameters csp_dnet = new CspParameters(1, "HSM especific CSP");
csp_dnet.Flags = CspProviderFlags.UseNonExportableKey;
csp_dnet.KeyContainerName = "test";
RSACryptoServiceProvider rsa_dnet = new RSACryptoServiceProvider(csp_dnet);
// Create 3DES key
TripleDES tripleDES = new TripleDESCryptoServiceProvider();
// Encrypt 3DES with RSA
byte[] encryptedSessionKey = rsa_dnet.Encrypt(tripleDES.Key, false);
Run Code Online (Sandbox Code Playgroud)
看到CSP日志,我注意到C#正在尝试导出密钥以继续操作.下面的CSP日志显示了关于rsa_dnet.Encrypt的部分:
LOG CSP
...
[12/12/2012 17:28:45] [3688] D [CryptExportKey] Blob type: PRIVATEKEYBLOB
...
[12/12/2012 17:28:45] [3688] E [CryptExportKey] Return: FALSE. An internal error occurred.
Run Code Online (Sandbox Code Playgroud)
Windows SO调用CryptExportKey传递PRIVATEKEYBLOB意味着导出de私钥.
LOG HSM
...
2012/12/12 17:44:02 [4DD18140] new key 'test/CSP50C8C7CD', t: 6, a: 0 …Run Code Online (Sandbox Code Playgroud)