C# PInvoke CryptImportKey 因“指定的类型无效”而失败

Posted

技术标签:

【中文标题】C# PInvoke CryptImportKey 因“指定的类型无效”而失败【英文标题】:C# PInvoke CryptImportKey Fails with "Invalid type specified" 【发布时间】:2015-03-23 06:25:57 【问题描述】:

我正在尝试使用 CryptImportKey 函数将 PFX 导入 Gemalto .NET IDPrime 智能购物车,但我收到“指定的类型无效”(2148073482) 错误。我怀疑 RSACryptoServiceProvider.ExportCspBlob(true) 调用以错误的格式返回密钥。我正在使用来自http://www.idrix.fr/Root/Samples/PfxImporter.cs 的示例代码。注意:我已经将 Microsoft Base Smart Card Crypto Provider 的 AllowPrivateExchangeKeyImport 和 AllowPrivateSignatureKeyImport 设置为 0x1,但仍然没有变化。我正在运行 Windows Server 2012,但不认为这是问题所在。

谁能告诉我这个代码示例有什么问题?

【问题讨论】:

【参考方案1】:

您的问题肯定是由于您的应用程序是在 64 位 Windows 上运行的 32 位,并且您没有更改位于 Wow6432Node 下的 Microsoft Base CSP 32 位注册表项.

要解决您的问题,请同时在“HKLM\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Defaults\Provider\Microsoft Base Smart Card Crypto Provider”下更改 AllowPrivateExchangeKeyImport 和 AllowPrivateSignatureKeyImport。

我已更新 PfxImporter.cs 标头中的评论以包含此评论。

【讨论】:

以上是关于C# PInvoke CryptImportKey 因“指定的类型无效”而失败的主要内容,如果未能解决你的问题,请参考以下文章

通过 Pinvoke 传递 C# 字符串

如何使用 pinvoke 将图像从 c 或 c++ 发送到 C#

C# PInvoke 传递出 unsigned char*

将带有结构字段的结构从 c++ 返回到 c# pinvoke

__vectorcall 通过 C++/CLI 或 PInvoke (C#)

从 c++ 到 c# 的 pinvoke 字节数组