2010-11-04 19 views
7

के साथ डिक्रिप्ट मुझे एक संदेश usg09 प्रमाणपत्र को डिक्रिप्ट करने में कोई समस्या है।PrivateKey X.509 प्रमाणपत्र

मैं इस विकल्प के साथ makecert के साथ अपने प्रमाण पत्र उत्पन्न:

makecert -r -pe -n "CN=MyCertificate" -ss CA -sr CurrentUser -a sha1 -sky signature -cy authority -sv CA.pvk CA.cer 

और PrivateKey "mypassword" था।

मेरी समस्या तब होती है जब मैं पिछले प्रमाणपत्र के साथ सी # में एन्क्रिप्ट करना चाहता हूं।

मुझे यह कक्षा http://blog.shutupandcode.net/?p=660 मिली, लेकिन X509Decrypt विधि में हमेशा निजीकी शून्य है।

 
public static byte[] X509Decrypt(byte[] data, string certificateFile, string password) 
{ 
    // load the certificate and decrypt the specified data 
    using (var ss = new System.Security.SecureString()) 
    { 
     foreach (var keyChar in password.ToCharArray()) 
      ss.AppendChar(keyChar); 

     // load the password protected certificate file 
     X509Certificate2 cert = new X509Certificate2(certificateFile, ss); 

     using (RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert.PrivateKey) 
     { 
      return rsa.Decrypt(data, true); 
     }  
    } 
} 

मैं प्रमाणपत्र फ़ाइल (.cer)

 
X509DecryptString(token, @"c:\CA.cer", "mypassword"); 

गुजर और PVK फ़ाइल (.pvk)

 
X509DecryptString(token, @"c:\CA.pvk", "mypassword"); 

गुजर करने की कोशिश की लेकिन allways कि PrivateKey संपत्ति अशक्त है।

क्या कोई मुझे पीवीके फ़ाइल का उपयोग कर संदेश को डिक्रिप्ट करने के लिए मार्गदर्शन कर सकता है?

धन्यवाद,

जोस

उत्तर

12

प्रमाण पत्र ही केवल सार्वजनिक कुंजी है (+ कुछ डेटा), लेकिन निजी कुंजी। (यह बहुत ही असंभव है कि आरएसए निजी कुंजी "mypassword" है। पासवर्ड जो आपकी निजी कुंजी की सुरक्षा करता है वह "mypassword" हो सकता है, लेकिन निजी कुंजी स्वयं (अधिक विशेष रूप से निजी एक्सपोनेंट, आरएसए में) एक लंबी संख्या होगी।)

परिणामस्वरूप (क्योंकि CA.cer में केवल प्रमाणपत्र शामिल है), X509DecryptString(token, @"c:\CA.cer", "mypassword") लगभग निश्चित रूप से काम नहीं करेगा।

X509DecryptString(token, @"c:\CA.pvk", "mypassword"); सिद्धांत रूप से काम कर सकता है, लेकिन आप इसे X509Certificate2 ऑब्जेक्ट बना रहे हैं, और इसे अभी भी प्रमाणपत्र और निजी कुंजी की आवश्यकता है। आपको इसे पीकेसीएस # 12 कंटेनर (.p12/.pfx) से लोड करने में सक्षम होना चाहिए।

इस कंटेनर बनाने के लिए, आप pvk2pfx उपयोग कर सकते हैं:

pvk2pfx -spc CA.cer -pvk CA.pvk -pfx CA.pfx 

(आप -pfx CA.pfx निर्दिष्ट नहीं करते हैं, यह इंटरैक्टिव इंटरफ़ेस है, जो मामले में आप बॉक्स टिक करने के लिए निजी निर्यात करने के लिए की जरूरत का शुभारंभ करेंगे कुंजी।)

फिर, उस पीएफएक्स/पी 12 फ़ाइल का उपयोग करके डिक्रिप्ट करने का प्रयास करें।

+0

मैं गलत था। "mypassword" निजी कुंजी नहीं था। आपकी टिप्पणी के लिए धन्यवाद यह सहायक रहा था। नई पीएफएक्स फ़ाइल के साथ मैं संदेश को डिक्रिप्ट कर सकता हूं। – jomarmen

0

मुझे लगता है कि आपको सार्वजनिक/निजी कुंजी जोड़ी उत्पन्न करने के लिए "-स्की एक्सचेंज" का उपयोग करना चाहिए।

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