2009-07-22 24 views
7

Bu benzer bir soru this one ama Bouncey Castle rotası aşağı gitmeden önce, bir RSA KeyPair bir RSA KeyPair yüklemek mümkün olup olmadığını bilen var mı .pem dosyası, örneğin: bir 3. partiye gitmek ya da kendi rulo zorunda kalmadan .NET 3.5 kripto kütüphanesi ile doğrudan.pem dosyasından özel anahtarla şifrelenmesi. NET kripto kitaplığı ile

-----BEGIN RSA PRIVATE KEY----- 
MIIBOgIBAAJBALKzy66nRuof8Fg0ItatyHS9RiDIKH0m5lorKzKn4y5wR6BXpVUv 
ZwnevrAJWBd6EPr/lcV3hjObxD6+q9vmN8ECAwEAAQJAGNcxWwfZrbXe3QPyS9FA 
aindU7U/G5aKssIJcTMxO0UYpGU+WArJbboKeEIE7bpNfhDOKTL7ZL6kWBR1Svlh 
WQIhAOhtx+xXuSrIot59tmXZaypBDjA4n+Xare0ObFLQxWuvAiEAxNMwm6w33bVr 
FHS9slkOh59Le2mgs0uNT6perHaRP48CIGMyRzrlDY/m5SvTtz6slgIIlceawxNU 
Sxp7J1wI4djdAiA6+BchHNjkCP2a9Fr9OydaRMSFpiDqduFQk/enbiKYSwIhANO3 
SQ51oLFtWN9gX3tfKTXflyO6BV8rgPo980d9CEsb 
-----END RSA PRIVATE KEY----- 

?

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

+0

@CraigMcQueen iyi bir soru ... yanlışlıkla düşünün. –

cevap

11

http://www.jensign.com/opensslkey/index.html kaynağı ile

düzenleme: kısaltılmış alakalı kodu:

ilk, ---- ---- BEGIN ---- END arasında metin ayıklamak - Ben küçük bir hel oluşturduk

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

Boşver; Diğer sorudan çözüm bu oldu. – Stobor

+0

Bunu bir vereceğim… diğer sorunun çözümü için ne demek istediniz? Başvurulan soruya verilen cevap, Bouncy Castle kütüphanesini kullandı (ki bu da benim için de işe yarıyor). Mümkünse 3. parti kütüphanelerine olan güvenimi minimize etmek istiyorum. Çok cömert lisanslı olanlar bile. –

+0

@Tim Jarvis: Şu anda diğer soru için en iyi cevap "JavaScience'ın OpenSSLKey kaynağına bir göz atabilirsiniz." Yukarıda bağladığım ve kopyaladığım ile aynı. (BouncyCastle, soru soranın kendisinin nasıl cevap verdiğini, kabul edilen cevabı değil ...) – Stobor

0

: --- bölümleri ve bir bayt dizisi base64-kod çözme onu sonra onu geçmek, (ayrıntılar için yukarıdaki bağlantıya bakın) Genel anahtar ve özel (rsa) anahtarına dayalı bir X509 sertifikası oluşturmak için NuGet paketi başına.

işlevsellik ve opensslkey göre kod örnekler için NuGet ve Github-project bakınız.

İlgili konular