2010-07-13 17 views
7

आम तौर पर जब मैं एक X509Certificate2 मेरी कुंजीस्टोर से बाहर हड़पने मैं एक AsymmetricAlgorithm के रूप में प्रमाणपत्र की निजी कुंजी को पुनः प्राप्त करने के लिए .PrivateKey कॉल कर सकते हैं। हालांकि मैं Bouncy कैसल का उपयोग करने का फैसला किया है और X509Certificate के अपने उदाहरण केवल एक getPublicKey(); है मैं प्रमाणपत्र से बाहर निजी कुंजी प्राप्त करने के लिए एक तरह से नहीं देख सकता। कोई विचार? वहाँBouncyCastle X509 प्रमाणपत्र से निजी कुंजी प्राप्त करें? सी #

//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? 

है वैसे भी एक AsymmetricKeyParameter करने के लिए एक AsymmetricAlgorithm (सी # निजी कुंजी) कन्वर्ट करने के लिए (निजी कुंजी bouncycastle):

मैं तो मेरे विंडोज मेरी कीस्टोर से एक X509Certificate2 मिल का उपयोग करें?

+1

कैसे आप X509Certificate वस्तु प्राप्त कर रहे हैं? आप किस प्रकार का कंटेनर उपयोग कर रहे हैं? – CriGoT

+0

अद्यतन प्रश्न। –

+1

X509 प्रमाण पत्र में * नहीं * निजी कुंजी है। –

उत्तर

12

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); 
 

का उपयोग करके कोड कॉल कर सकते हैं जाहिर है इस मानता है कि प्रमाण पत्र एक आरएसए कुंजी लेकिन एक ही परिणाम भी शामिल DSACryptoServiceProvider और DSAParameters

+0

एक बहुत आकर्षण की तरह काम किया है, तो आप एक सज्जन और एक विद्वान हैं। –

+0

क्या आप कृपया डीएसए के लिए कोड प्रदान कर सकते हैं? एक ने खुद से कोशिश की, लेकिन यह काम नहीं करता है ... – vojta

19
Akp = Org.BouncyCastle.Security.DotNetUtilities.GetKeyPair(this.Certificate.PrivateKey).Private; 
+4

यह जवाब होना चाहिए? – Sushant

1
साथ DSA के लिए प्राप्त किया जा सकता

खोजें नेट 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); 
संबंधित मुद्दे