在 vb.net 中生成 CngKey 时,我正在尝试使用 HSM 提供程序来执行 ECDH。
'provider' 设置正确(我可以做其他事情,即生成一个 AES 密钥并使用它)。
如果我使用 HSM 原生工具预先生成密钥,Exists() 返回 true,但是当我尝试使用它时,HSM 会响应“不支持此操作”。这可能是它不受支持(文档说它是,但是),或者它不受 CngKey 支持,因为它正在做一些意想不到的事情但是 .net(.Net 本身不支持/没有 .NET 提供程序),或者我没有生成合适的密钥。
为了测试它是否是关键元数据问题(使用等),我正在尝试使用 CngKey.Create 与提供者一起生成密钥:
Dim key As CngKey = Nothing
Dim keyExists As Boolean = CngKey.Exists(keyName, provider)
If Not keyExists Then
Dim keyCreationParameters = New CngKeyCreationParameters()
keyCreationParameters.Provider = provider
keyCreationParameters.ExportPolicy = CngExportPolicies.AllowExport
keyCreationParameters.KeyUsage = CngKeyUsages.KeyAgreement
Try
CngKey.Create(New CngAlgorithm("ECDiffieHellmanP521"), keyName, keyCreationParameters)
Catch ex As Exception
Button1.Text = ex.Message
Return
End Try
End If
' open the key (I can open the pre-generated key and get a key handle
' but then it fails later when I try to use it):
Using alice As New ECDiffieHellmanCng(serverKeyPair) ' serverKeyPair is the handle
throws System.ArgumentException "使用的键......必须有一个 ECDiffieHellman 算法组"
并且提供者日志只是说“算法组”是空的。
假设:
- Querent 上次在 VB 中工作时是 Windows 3.1。它……继续前进。
因此,如果上述内容完全是“这不是你这样做的方式”,请展示,不要说出来,因为我可能不会明白这个说法。