将 PKCS#8 加密密钥导入 RSACng?

Importing PKCS#8 encrypted key to RSACng?

如果我在 PKCS#8 中加密了 RSA 密钥,我能否以某种方式将其作为 CngKeyBlobFormat.Pkcs8PrivateBlob 导入到 RSACng?还是这个CngKeyBlobFormat.Pkcs8PrivateBlob只是说明了CngKey在导入的时候key必须从DER解码得到key参数然后导入到RSACng,所以答案是否定的?

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 对象中(功能目前是在主分支中)。
  • 找一个可以为你解密的图书馆。充气城堡大概可以做到。

另请参阅:Digital signature in c# without using BouncyCastle