将 BouncyCastle DSAPrivateKeyParameters 转换为 System.Security.Cryptography.DSAParameters
Convert BouncyCastle DSAPrivateKeyParameters to System.Security.Cryptography.DSAParameters
我正在尝试使用 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 参数中,所以我不知道应该输入什么值里面。
请帮忙。
最后我自己解决了它作为另一个问题的副作用。从不同的方向开始:我在 .NET 中生成密钥对,然后使用 DotNetUtilities 将其转换为 Bouncy Castle。
最终的工作代码在这里,希望对您有所帮助:
我正在尝试使用 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 参数中,所以我不知道应该输入什么值里面。
请帮忙。
最后我自己解决了它作为另一个问题的副作用。从不同的方向开始:我在 .NET 中生成密钥对,然后使用 DotNetUtilities 将其转换为 Bouncy Castle。
最终的工作代码在这里,希望对您有所帮助: