首页 > 解决方案 > 将 PKCS#8 加密密钥导入 RSACng?

问题描述

如果我在 PKCS#8 中加密了 RSA 密钥,我可以以某种方式将其导入RSACngasCngKeyBlobFormat.Pkcs8PrivateBlob吗?或者这CngKeyBlobFormat.Pkcs8PrivateBlob只是表明CngKey在导入期间必须从 DER 解码密钥以获取密钥参数,然后将它们导入RSACng,因此答案是否定的?

标签: c#.netcryptographycng

解决方案


CNG 知道如何解密加密的 PKCS#8,但您需要给它一个密码。由于 .NET 不要求您输入密码(并且它通过属性以外的方式传递),因此没有一个好的方法来做到这一点。

您的选择非常多:

  • P/Invoke 以便您可以指定 NCRYPTBUFFER_PKCS_SECRET 值。
  • 更改您的流程,以便您拥有未加密的 PKCS#8。
  • 更改您的流程,以便您拥有 PFX/PKCS#12 而不是加密的 PKCS#8(然后更改为通过 X509Certificate2 读取它)。
  • 等待 .NET Core 的未来版本,它将能够将 PKCS#8、加密的 PKCS#8 和一些其他格式直接加载到 RSA/DSA/ECDsa/ECDiffieHellman 对象中(该功能目前在主分支)。
  • 找到可以为您解密的库。充气城堡大概可以做到。

另请参阅:不使用 BouncyCastle 的 c# 中的数字签名


推荐阅读