2011-10-10 17 views
7

हम सी # कोड का उपयोग करते हैं, हम .1212 फ़ाइल के साथ X509Certificate2 का निर्माण करते हैं, कन्स्ट्रक्टर में हम प्रमाणपत्र, प्रमाणपत्र का पासवर्ड डालते हैं। हम भी निर्यात भी किया जा के रूप में यह चिह्नित जिन्हें आप नीचे देख: अबX509Certificate ऑब्जेक्ट से निजी कुंजी निर्यात करें

x509Certificate2.PrivateKey 

, हम के रूप में प्रमाण पत्र से निजी कुंजी प्राप्त करना चाहते हैं:

X509Certificate2 x509Certificate2 = new X509Certificate2 
("...\\MyCerificate.p12", "[email protected]", X509KeyStorageFlags.Exportable); 

हम पालन करते हुए AsymmetricAlgorithm प्रारूप के रूप में निजी कुंजी प्राप्त बेस 64 प्रारूप - लेकिन हमें नहीं पता कि यह कैसे करना है, और यह हमारे लिए इतना महत्वपूर्ण है।

+0

आप बेस 64 आउटपुट का उपयोग करने की कोशिश कर रहे हैं? क्या यह सख्त जरूरत है या वरीयता है? –

उत्तर

2

आप बस X509Certificate2 की निजीकी संपत्ति का उपयोग कर सकते हैं। वास्तविक लौटे निजी कुंजी कार्यान्वयन प्रमाण पत्र में प्रयोग किया जाता एल्गोरिथ्म पर निर्भर करता है - आम तौर पर इस आरएसए है:

rsaObj = (RSACryptoServiceProvider)myCertificate.PrivateKey; 

बाद में आप RSA कुंजी जानकारी प्राप्त करने में सक्षम यह ExportParameters संपत्ति है से होना चाहिए।

+0

और जब हम मुख्य जानकारी जानते हैं (उदाहरण के लिए आरएसए-पीकेसीएस 1-कीएक्स), हम निजी कुंजी को बेस 64 में कैसे परिवर्तित कर सकते हैं? – RRR

-3

अपने समस्या सिर्फ निजी कुंजी Base64 इनकोडिंग करने के लिए है, तो आप बस इस तरह कर सकते हैं:

var privateKey = x509Certificate2.PrivateKey; 
var encoding = new System.Text.ASCIIEncoding(); 
var base64String = Convert.ToBase64String(encoding.GetBytes(privateKey.ToString())); 
+2

PrivateKey.ToString() "System.Security.Cryptography.RSACryptoserviceProvider" देता है ....., यह निजी कुंजी नहीं है ... – RRR

+0

@RRR सही है। आप पाएंगे कि x509Certificate2.PublicKey.Key.ToString() * वही * वैल्यू इस तरह से कर देगा। यह सही नहीं हो सकता है :) – rdev5

3

महत्वपूर्ण सवाल क्यों बेस 64 है?

यदि यह आपके अपने एप्लिकेशन के लिए है तो आप निजी कुंजी को XML स्ट्रिंग के रूप में रख सकते हैं (बहुत आसान :-)।

string xml = x509Certificate2.PrivateKey.ToXmlString (true); 

आप (बस आपके आवेदन के लिए फिर से)base64 चाहते हैं तो आप तो हर byte[] concat कुंजी (RSAParameters) निर्यात कर सकते हैं और एक बेस 64 स्ट्रिंग के लिए मर्ज किए गए उत्पादन कर देते हैं।

लेकिन आप अन्य अनुप्रयोगों है कि एक बेस 64 निजी कुंजी तो की आवश्यकता है आप प्रारूप (बेस 64 स्ट्रिंग के अंदर) जानने की जरूरत के साथ Interop करना चाहते हैं। जैसे कई मामलों में निजी कुंजी PEM एन्कोडेड (जो एक विशेष शीर्षलेख/पाद लेख के साथ बेस 64 है, X509Certificate के लिए देखें)।

यदि आप जो खोज रहे हैं तो आपको निजी कुंजी को PKCS#8 संरचना में पहले एन्कोड करना होगा, फिर बेस 64 में बदलें और हेडर/पाद लेख जोड़ें। आप inside Mono.Security.dll (मोनो प्रोजेक्ट से एमआईटी.एक्स 11 लाइसेंस प्राप्त कोड) करने के लिए कुछ उपयोगी कोड पा सकते हैं।

+0

मैंने अन्य एप्लिकेशन पर चित्रित किया जिसके लिए बेस 64 निजी कुंजी प्राप्त करने की आवश्यकता है। मैं उपयोगकर्ता को X509Certificate2 डालने की अनुमति देना चाहता हूं और खुद को निजी कुंजी को मूल 64 प्रारूप के रूप में निकालने की अनुमति देना चाहता हूं - क्या आपको पता है कि नेट फ्रेमवर्क इसे करने के किसी भी तरीके से खुलासा करता है? – RRR

+0

नहीं, अगर ऐसा हुआ (मुझे वास्तव में संदेह है) या अगर मुझे पता था कि मैं इसे अपने उत्तर में शामिल कर दूंगा।कहा जा रहा है कि आपकी समस्या बनी हुई है, यह ** बेस 64 ** मुद्दा नहीं है, यह जानना है कि ** ** ** है जो आपके अन्य एप्लिकेशन के साथ जुड़ना महत्वपूर्ण है। – poupou

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^