Convert BouncyCastle DSAPrivateKeyParameters to System.Secur

本文关键字:System Secur to DSAPrivateKeyParameters BouncyCastle Convert | 更新日期: 2023-09-27 18:12:19

我正在尝试使用Bouncy Castle使用私钥生成一个新的自签名X509证书(X509Certificate2的实例)。我在谷歌上搜索了一些RSA的例子,并基于这些例子创建了这个代码。我使用Bouncy Castle生成证书,然后我试图将其转换为X509Certificate2,但我不知道如何将Bouncy Castle DSA私钥(DSAPrivateKeyParameters)转换为System.Security.Cryptography.DSAParameters

var keypairgen = new DsaKeyPairGenerator();
DsaParametersGenerator paramgen = new DsaParametersGenerator();
paramgen.Init(1024, 100, new SecureRandom());
DsaKeyGenerationParameters param = new DsaKeyGenerationParameters(new SecureRandom(), paramgen.GenerateParameters());
keypairgen.Init(param);
var keypair = keypairgen.GenerateKeyPair();
var gen = new X509V3CertificateGenerator();
var CN = new X509Name("CN=" + "TEST");
var SN = BigInteger.ProbablePrime(120, new Random());
gen.SetSerialNumber(SN);
gen.SetSubjectDN(CN);
gen.SetIssuerDN(CN);
gen.SetNotAfter(DateTime.MaxValue);
gen.SetNotBefore(DateTime.Now.Subtract(new TimeSpan(7, 0, 0, 0)));
gen.SetSignatureAlgorithm("sha1WithDSA");
gen.SetPublicKey(keypair.Public);
var newCert = gen.Generate(keypair.Private);
certificateDSA = new X509Certificate2(DotNetUtilities.ToX509Certificate((Org.BouncyCastle.X509.X509Certificate)newCert));
certificateDSA.PrivateKey = ToDotNetKey(keypair.Private); //!!!! this line !!!!

有问题的行是最后一行。我应该如何实现这个ToDotNetKey() ?我以为这是一些简单的属性映射,但事实并非如此。例如,在DSAParameters中有一个属性叫做J(或Y),它不在Bouncy Castle参数中,所以我不知道我应该在里面放什么值。

请帮助。

Convert BouncyCastle DSAPrivateKeyParameters to System.Secur

最后作为另一个问题的附带结果,我自己解决了它。从不同的方向开始:我在。net中生成密钥对,然后使用DotNetUtilities将其转换为Bouncy Castle。

最后的工作代码在这里,我希望它会帮助你:

https://stackoverflow.com/a/32518689/3899583