【发布时间】:2012-07-22 04:06:26
【问题描述】:
我可以使用以下代码解密受密码保护的 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 EncryptedPrivateKeyInfo 生成的非PBE 算法。
Google 搜索除了函数的源代码外什么也没有显示,尽管我试图按照它找到我无法找到的解决方案。
谁能指出我如何使用该功能从标准 .net 私钥创建受密码保护的 PKCS8 DER 密钥的正确方向?
【问题讨论】:
-
codeproject.com/Articles/25487/… PrivateKeyToPKCS8 方法可能
标签: c# .net bouncycastle pfx