14

通常、キーストアから取得するときは、証明書の秘密鍵をとして取得するためにX509Certificate2呼び出すことができます。ただし、Bouncy Castleを使用することにしました。そのインスタンスには、証明書から秘密鍵を取得する方法がわかりません。何か案は?.PrivateKeyAsymmetricAlgorithmX509CertificategetPublicKey();

Windows-MYキーストアからX509Certificate2を取得し、次を使用します。

//mycert is an X509Certificate2 retrieved from Windows-MY Keystore
X509CertificateParser certParser = new X509CertificateParser();
X509Certificate privateCertBouncy = certParser.ReadCertificate(mycert.GetRawCertData());
AsymmetricKeyParameter pubKey = privateCertBouncy.GetPublicKey();
//how do i now get the private key to make a keypair?

AsymmetricAlgorithm(C#秘密鍵)をAsymmetricKeyParameter(弾む城の秘密鍵)に変換する方法はありますか?

4

3 に答える 3

33
Akp = Org.BouncyCastle.Security.DotNetUtilities.GetKeyPair(this.Certificate.PrivateKey).Private;
于 2011-09-16T11:10:03.123 に答える
22

BouncyCastle についてはよくわかりませんが、キー パラメーターに基づいてキーを再作成するのが簡単なように思えます。

public static AsymmetricKeyParameter TransformRSAPrivateKey(
    AsymmetricAlgorithm privateKey)
{
    RSACryptoServiceProvider prov = privateKey as RSACryptoServiceProvider;
    RSAParameters parameters = prov.ExportParameters(true);
    
    return new RsaPrivateCrtKeyParameters(
        new BigInteger(1,parameters.Modulus),
        new BigInteger(1,parameters.Exponent),
        new BigInteger(1,parameters.D),
        new BigInteger(1,parameters.P),
        new BigInteger(1,parameters.Q),
        new BigInteger(1,parameters.DP),
        new BigInteger(1,parameters.DQ),
        new BigInteger(1,parameters.InverseQ));
}

を使用してコードを呼び出すことができます

AsymmetricKeyParameter bouncyCastlePrivateKey = 
    TransformRSAPrivateKey(mycert.PrivateKey);

明らかに、これは証明書に RSA キーが含まれていることを前提としていますが、 と を使用した DSA についても同じ結果が得られDSACryptoServiceProviderますDSAParameters

于 2010-07-13T22:47:41.390 に答える
3

.NET X509Certificate2 を見つけます。

X509Certificate2 cert = this.FindCertificate(certificateFriendlyName);

それを BouncyCastle 証明書に解析し、X509Certificate2Signature を使用して署名を取得します。

var parser = new X509CertificateParser();
var bouncyCertificate = parser.ReadCertificate(cert.RawData);
var algorithm = DigestAlgorithms.GetDigest(bouncyCertificate.SigAlgOid);
var signature = new X509Certificate2Signature(cert, algorithm);
于 2015-05-20T11:08:28.017 に答える