2015-09-10 92 views
0

我试图使用生成充气城堡一个新的自签名X509证书(的X509Certificate2实例)与私钥。我搜索了一些RSA的例子,并基于这些例子创建了这些代码。我用充气城堡证书生成,然后我试图将其转换为X509Certificate2,但我不知道该怎么充气城堡DSA私钥(DSAPrivateKeyParameters)转换为System.Security.Cryptography.DSAParameters转换BouncyCastle的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参数中,所以我不知道我应该放入什么值。

请帮助。

回答

0

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

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

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

相关问题