将 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
如果我在 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