2009-07-22 10 views
7

के साथ .pem फ़ाइल से निजी कुंजी के साथ डिक्रिप्ट करना मुझे पता है कि यह this one पर एक समान प्रश्न है, लेकिन इससे पहले कि मैं बाउंसी कैसल मार्ग से नीचे जाऊं, क्या किसी को पता है कि आरएसए कीपैयर को लोड करना संभव है या नहीं .pem फ़ाइल, जैसे:सी # में .NET क्रिप्टो लाइब्रेरी

-----BEGIN RSA PRIVATE KEY----- 
MIIBOgIBAAJBALKzy66nRuof8Fg0ItatyHS9RiDIKH0m5lorKzKn4y5wR6BXpVUv 
ZwnevrAJWBd6EPr/lcV3hjObxD6+q9vmN8ECAwEAAQJAGNcxWwfZrbXe3QPyS9FA 
aindU7U/G5aKssIJcTMxO0UYpGU+WArJbboKeEIE7bpNfhDOKTL7ZL6kWBR1Svlh 
WQIhAOhtx+xXuSrIot59tmXZaypBDjA4n+Xare0ObFLQxWuvAiEAxNMwm6w33bVr 
FHS9slkOh59Le2mgs0uNT6perHaRP48CIGMyRzrlDY/m5SvTtz6slgIIlceawxNU 
Sxp7J1wI4djdAiA6+BchHNjkCP2a9Fr9OydaRMSFpiDqduFQk/enbiKYSwIhANO3 
SQ51oLFtWN9gX3tfKTXflyO6BV8rgPo980d9CEsb 
-----END RSA PRIVATE KEY----- 
सीधे .NET 3.5 क्रिप्टो पुस्तकालय के साथ एक 3 पार्टी के लिए जा सकते हैं या अपने खुद के रोल किए बिना

?

+0

@CraigMcQueen अच्छा सवाल ... त्रुटि में मुझे लगता है। –

उत्तर

11

http://www.jensign.com/opensslkey/index.html

स्रोत के साथ

http://www.jensign.com/opensslkey/opensslkey.cs

पर संपादित करें: कुछ अंश प्रासंगिक कोड:

पहले ---- शुरू ---- और ---- अंत के बीच पाठ निकाल - --- वर्गों, और एक बाइट सरणी में बेस 64-डिकोड यह (विवरण के लिए ऊपर लिंक देखें), तो यह करने के लिए पारित:

//------- Parses binary ans.1 RSA private key; returns RSACryptoServiceProvider --- 
public static RSACryptoServiceProvider DecodeRSAPrivateKey(byte[] privkey) 
{ 
    byte[] MODULUS, E, D, P, Q, DP, DQ, IQ ; 

// --------- Set up stream to decode the asn.1 encoded RSA private key ------ 
    MemoryStream mem = new MemoryStream(privkey) ; 
    BinaryReader binr = new BinaryReader(mem) ; //wrap Memory Stream with BinaryReader for easy reading 
    byte bt = 0; 
    ushort twobytes = 0; 
    int elems = 0; 
    try { 
     twobytes = binr.ReadUInt16(); 
     if (twobytes == 0x8130) //data read as little endian order (actual data order for Sequence is 30 81) 
      binr.ReadByte(); //advance 1 byte 
     else if (twobytes == 0x8230) 
      binr.ReadInt16(); //advance 2 bytes 
     else 
      return null; 

     twobytes = binr.ReadUInt16(); 
     if (twobytes != 0x0102) //version number 
      return null; 
     bt = binr.ReadByte(); 
     if (bt !=0x00) 
      return null; 


//------ all private key components are Integer sequences ---- 
     elems = GetIntegerSize(binr); 
     MODULUS = binr.ReadBytes(elems); 

     elems = GetIntegerSize(binr); 
     E = binr.ReadBytes(elems) ; 

     elems = GetIntegerSize(binr); 
     D = binr.ReadBytes(elems) ; 

     elems = GetIntegerSize(binr); 
     P = binr.ReadBytes(elems) ; 

     elems = GetIntegerSize(binr); 
     Q = binr.ReadBytes(elems) ; 

     elems = GetIntegerSize(binr); 
     DP = binr.ReadBytes(elems) ; 

     elems = GetIntegerSize(binr); 
     DQ = binr.ReadBytes(elems) ; 

     elems = GetIntegerSize(binr); 
     IQ = binr.ReadBytes(elems) ; 

     Console.WriteLine("showing components .."); 
     if (verbose) { 
      showBytes("\nModulus", MODULUS) ; 
      showBytes("\nExponent", E); 
      showBytes("\nD", D); 
      showBytes("\nP", P); 
      showBytes("\nQ", Q); 
      showBytes("\nDP", DP); 
      showBytes("\nDQ", DQ); 
      showBytes("\nIQ", IQ); 
     } 

// ------- create RSACryptoServiceProvider instance and initialize with public key ----- 
     RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); 
     RSAParameters RSAparams = new RSAParameters(); 
     RSAparams.Modulus =MODULUS; 
     RSAparams.Exponent = E; 
     RSAparams.D = D; 
     RSAparams.P = P; 
     RSAparams.Q = Q; 
     RSAparams.DP = DP; 
     RSAparams.DQ = DQ; 
     RSAparams.InverseQ = IQ; 
     RSA.ImportParameters(RSAparams); 
     return RSA; 
    } 
    catch (Exception) { 
     return null; 
    } 
    finally { 
     binr.Close(); 
    } 
} 
+0

कोई बात नहीं; वह दूसरे प्रश्न से समाधान था। – Stobor

+0

मैं इसे एक दूंगा ... तुम्हारा क्या मतलब था कि दूसरे प्रश्न का समाधान था? संदर्भित प्रश्न के स्वीकृत उत्तर ने बाउंसी कैसल लाइब्रेरी का उपयोग किया (जो मेरे लिए भी काम करता है)। मैं बस जहां संभव हो वहां तीसरे पक्ष के पुस्तकालयों पर अपनी निर्भरता को कम करना चाहता हूं। बहुत उदार लाइसेंस वाले भी। –

+0

@ टिम जार्विस: वर्तमान में अन्य प्रश्न के लिए शीर्ष उत्तर यह है कि "आप ओपनएसएसएलके के लिए जावासाइंस के स्रोत पर एक नज़र डाल सकते हैं।" यह वही है जो मैंने लिंक किया है और ऊपर कॉपी किया है। (BouncyCastle यह है कि प्रश्नकर्ता ने खुद को जवाब दिया, स्वीकार्य उत्तर नहीं ...) – Stobor

0

मैं एक छोटे से HEL बना लिया है सार्वजनिक कुंजी और निजी (आरएसए) कुंजी के आधार पर X509 प्रमाणपत्र बनाने के लिए प्रति NuGet पैकेज प्रति।

NuGet और Github-project देखें opensslkey पर आधारित कार्यक्षमता और कोड-उदाहरणों के लिए।

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