我可以使用以下代码解密受密码保护的PKCS8 DER密钥:
MemoryStream ms = new MemoryStream(privateKey);
AsymmetricKeyParameter keyparams = Org.BouncyCastle.Security.PrivateKeyFactory.DecryptKey(password.ToCharArray(), ms);
RSAParameters rsaparams = DotNetUtilities.ToRSAParameters((RsaPrivateCrtKeyParameters)keyparams);
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.ImportParameters(rsaparams);
return rsa;
现在,当它以不同的格式提供给我时,我必须重新创建相同类型的密钥(在此示例中,它是作为 PFX 文件提供给我的)。所以我必须从 PFX 私钥创建一个受密码保护的 PKCS8 DER 密钥。在阅读了 Bouncy Castle 源代码后,我设法找到了该PrivateKeyFactory.EncryptKey
功能,但我无法让它工作。我的代码如下:
X509Certificate2 cert = new X509Certificate2(pfx_bytes, password,X509KeyStorageFlags.Exportable);
var pkey = cert.PrivateKey;
var bcCert = DotNetUtilities.FromX509Certificate(cert);
var bcPkey = DotNetUtilities.GetKeyPair(pkey).Private;
return PrivateKeyFactory.EncryptKey(Org.BouncyCastle.Asn1.DerObjectIdentifier.Der, password.ToCharArray(), Encoding.UTF8.GetBytes(Guid.NewGuid().ToString()), 10, bcPkey);
当我运行前面的代码时,我得到了异常"System.ArgumentException
:尝试将非 PBE 算法与PBE EncryptedPrivateKeyInfo生成一起使用。
谷歌搜索除了函数的源代码外什么都没有显示,尽管我试图按照它来找到我无法找到的解决方案。
有人可以指出我如何使用该功能从标准.net 私钥创建受密码保护的PKCS8 DER密钥的正确方向吗?