2012-10-16 7 views
5

मैं C# के लिए नया हूं। मुझे उस जानकारी को बाहरी यूआरएल पर पोस्ट करने से पहले एक स्ट्रिंग एन्क्रिप्ट करने के लिए कहा जाता है। उस बाहरी एप्लिकेशन से इनपुट के रूप में मुझे जो कुछ मिला वह एक .der फ़ाइल और एक .pem फ़ाइल थी। उन्होंने मुझे एन्क्रिप्टेड (स्ट्रिंग) जानकारी भेजने के लिए कहा, ताकि वे डिक्रिप्ट कर सकें।सी # एन्क्रिप्शन, इनपुट के रूप में .der और .pem फ़ाइलें मिली

मैंने बहुत सी पोस्ट पढ़ी हैं, लेकिन मैं इसे हल करने के तरीके पर सटीक उत्तर नहीं दे सका।

मैं .pem फ़ाइल पढ़ने और प्रमाणपत्र बनाने के लिए नीचे दिए गए कोड स्निपेट का उपयोग कर रहा हूं। लेकिन पर नया X509 प्रमाणपत्र 2 (प्रमाणपत्र बफर); लाइन मुझे "अनुरोधित ऑब्जेक्ट नहीं मिल सका" त्रुटि फेंक रही है। मुझे यकीन नहीं है कि मैं सही दिशा में जा रहा हूं। यदि हां, तो इस मुद्दे को समझने में मेरी सहायता करें। अन्यथा मुझे एक रास्ता दिखाओ। अग्रिम में धन्यवाद!

var pem = System.IO.File.ReadAllText("C:\\Users\\bvarapr1\\Desktop\\fordsync\\public_qa.pem"); 
    byte[] certBuffer = GetBytesFromPEM(pem, "PUBLIC KEY"); 
    var certificate = new X509Certificate2(certBuffer);    
    RSACryptoServiceProvider provider = (RSACryptoServiceProvider)certificate.PrivateKey; 
    string testString = "DIGITALMOON"; 
    string encryptedVIN = RSAEnc(provider, testString); 

    byte[] GetBytesFromPEM(string pemString, string section) 
    { 
     var header = String.Format("-----BEGIN {0}-----", section); 
     var footer = String.Format("-----END {0}-----", section); 

     var start = pemString.IndexOf(header, StringComparison.Ordinal) + header.Length; 
     var end = pemString.IndexOf(footer, start, StringComparison.Ordinal) - start; 

     if (start < 0 || end < 0) 
     { 
      return null; 
     } 

     return Convert.FromBase64String(pemString.Substring(start, end)); 
    } 

उत्तर

8
static void Main(string[] args) 
{ 
    System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider(); 
    System.Security.Cryptography.RSAParameters rsaParam = rsa.ExportParameters(false); 
    rsaParam.Modulus = Convert.FromBase64String(System.IO.File.ReadAllText(@"C:\keys\public_key.pem").Replace("-----BEGIN PUBLIC KEY-----", "").Replace("-----END PUBLIC KEY-----", "")); 
    rsa.ImportParameters(rsaParam); 

    string msg = "This is a test."; 
    byte[] encValue = rsa.Encrypt(Encoding.UTF8.GetBytes(msg), false); 

    Console.WriteLine("Message Before Encryption: " + msg); 
    Console.WriteLine("Encrypted Message:\r\n" + Convert.ToBase64String(encValue)); 

    Console.WriteLine("\r\nPress any key to exit."); 
    Console.ReadKey(); 
} 
+2

इस कोड काम करता है मुझे के रूप में है, लेकिन अपने पीईएम फ़ाइल केवल सार्वजनिक कुंजी अवश्य होनी की जरूरत होगी। मुझे यकीन नहीं है कि आपकी सार्वजनिक कुंजी कैसे उत्पन्न हुई थी, लेकिन मैंने "openssl genrsa -out private_key.pem 1024" का उपयोग किया। फिर मैंने उपरोक्त कोड में उपयोग के लिए सार्वजनिक कुंजी निर्यात करने के लिए "openssl rsa -in private_key.pem -pubout -out public_key.pem" का उपयोग किया। – Jacob

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