2011-05-08 17 views
1

在我的C#項目,我把這段代碼:無法投型「Org.BouncyCastle.Asn1.DerSequence」的對象鍵入「Org.BouncyCastle.Asn1.DerInteger」

起初,我恢復從我用彈性城堡創建的證書,密鑰對,然後我提取私鑰,我的目標是,它是一種格式。 pem,

AsymmetricKeyParameter private_RSA = keyPair2.Private; 


      PrivateKeyInfo k_RSA = PrivateKeyInfoFactory.CreatePrivateKeyInfo(private_RSA); 
      byte[] serializedKey_priv_RSA = k_RSA.ToAsn1Object().GetDerEncoded(); 


      // byte[] clé = Org.BouncyCastle.Utilities.Encoders.Hex.Decode(serializedKey); 

      string data_priv_RSA = Convert.ToBase64String(serializedKey_priv_RSA); 

using (fluxInfos2 = new StreamWriter("myprivatekey.pem")) 
     { 
      string ligne = " -----BEGIN RSA PRIVATE KEY----- "; 
      fluxInfos2.WriteLine(ligne); 
      fluxInfos2.WriteLine(data_priv_RSA); 
      string lige2 = "-----END RSA PRIVATE KEY----- "; 

      fluxInfos2.WriteLine(lige2); 


     } 
     fluxInfos2.Close(); 

我的密鑰是完全創建的,也就是文件包含的內容;現在

-----BEGIN RSA PRIVATE KEY----- 

MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCQBr1EhPxHeVax8QbXQtUwaSyqhZehjxkgVp89Rkn3awfo7f9usQdLSp3tLSwAkHMvqi3UKSwUh8FlzCC0CBZCx1LOY05NS613tU/gaI7r+Zl4Iq+PevetEy8WxViRGoye/A9TU5r+BshT12MWYzVE/BYAb6OcsHZ5QztA+GDXA01YnTpgwOenkJXmrmmkSif80hk+NAWglnCqUzl3apZHhgVLpdkGDJPjhy8l9qOt6lu2gBQVX0AC8MyMt5Uqx9yFcR65+S8v8TV5Bc7Kk+9nkCl503k8Sn1fw4OWc6cMhK9E4/LF5MUIMO/UnIPQKeLbTlY8hAYG0sN0AJT/3IfxAgMBAAECggEAAyACT1BLYQmi9e1y5ozOr2Q40eJgLeM6+lam0d+Kj1HFNCql1jMFI38U+iZ2w/Rea3RX1jimejOP4LOTKhTa1swYYd4JvuebdfN7LjVWlIwv5klqYcSbRygZZ3cUuuFGl9SESJyRyl0/T4Jm5f91EnAd0hiaBjZV+7+Xs4swHrotSDrnSuMZGZ9skwws8Y0lfV6Lzvsh3+VerEq9X1yl8NJeKZrOOkAntu/yfMkcdj0+s+UvM7k8RenTCas1X5gVzv4b+CBNS9DgOmdIUUE4rSvF3ulTyWNXaWVJpvUvcT115ylxFPkyM+g1v/gqTd+L+I+npKVOK5qAtZobRTpMeQKBgQDBEWnu2Km3LxYYSDINbW7E5ytBUxIrNtwjo2IYstPJJ55hF4EQdwe7y10/eUbS/YsIj3xLXnYQGLaF52Mql/y9oCu8WsYE7CtFAhYfR19ibpM0Y2J4XXBc3r4Drg0EI9eqf6iT6vkpTlr7A0t7zPCc6YC6Sbt1o07NWuivdDdjPwKBgQC++Qjk9AmCbwXMBsRfgQMqdoAa+V137rl6dIE1/jHAQg39gKlQeEQ4ZI5+2FNqjMeSUSlkdJTvQhBWlFzeuiMU+uOix5E+aBuf8RVcmlT31rOtrF6DzV3Deg3zzT71SQIlbGp+dyJ8M9IOtZuDgUUu4asByklRNxt9GaqkfsK4zwKBgFPhNe3wMeQFUAsiqqRMzBg9+vv5lGY0AnZ1UHQ8lWjKjrPOG2PE4xZC53NhRFT8lMAWXsD7/D1ID1yjx+DEgaj9AqNlqKyQ0se7fVL/lkBUnB3ho/F5XwzqNRGyN7N5wwQvTFVfe/rnMP3nU48o3cy+YhANYqVcWys6+ObpjfrPAoGBAJd+jPy7TtPm6M1aTOuKN4225ZcAXJJokUDALUQ8uxDOFbUVHLuWPGAT/SpIx5uNxD+hHNnw1bkbSkS0exvAw1XAVVZrRCAijE+L+yszztWwv2a1h2C9SHVqXKkcF6aTXR187NoX/gZTQX6juJNQuCYhpPvNke3YbnkGJGVLnYLnAoGBAL/rT73jvNcr54hhzou8uYlFVGLNbE4IqbBIygTfC4Jd32NSZymcAL1/MLs6RvLj/Cd3DGVikS0y8nH5GGM8qxG0l1n9p96Z9AON+h0Jnen/HJvKPmq/SYkL2NNrg1CUHGL9FMDikMDBqIG/ttGIPCUZHyNAJJsMZJVfZJ9OP7Ru 

-----END RSA PRIVATE KEY----- 

,我必須做相反的,即,從文件中包含的數據關鍵,我必須有一個RsaPrivateCrtKeyParameters。要做到這一點,我寫了這個小碼:

KeyFile string = @ "C: \ Users \ Me \ Documents \ Visual Studio 2010 \ Projects \ PEM \ PEM \ bin \ Debug \ myprivatekey.pem"; 

RsaPrivateCrtKeyParameters GetPrivateKey privat = (KeyFile); 

如GetPrivateKey,如下:

public static RsaPrivateCrtKeyParameters GetPrivateKey(String pemFile) 
    { 
     if (string.IsNullOrEmpty(pemFile)) throw new ArgumentNullException("pemFile"); 

     string privateKey = File.Exists(pemFile) ? File.ReadAllText(pemFile) : pemFile; 

     var reader = new PemReader(new StringReader(privateKey)); 
     RsaPrivateCrtKeyParameters privkey = null; 
     Object obj = reader.ReadObject(); 
     if (obj is AsymmetricCipherKeyPair) 
     { 
      privkey = (RsaPrivateCrtKeyParameters)((AsymmetricCipherKeyPair)obj).Private; 
     } return privkey; 
    } 

的問題是,我收到一個例外,在:Object obj = reader.ReadObject();

Creating RSA private key problem: System.InvalidCastException: 

Unable to cast object of type 'Org.BouncyCastle.Asn1.DerSequence' to type 'Org.BouncyCastle.Asn1.DerInteger'. 
    to Org.BouncyCastle.Asn1.Pkcs.RsaPrivateKeyStructure .. ctor (Asn1Sequence seq) 
    to Org.BouncyCastle.OpenSsl.PemReader.ReadKeyPair (String type, String endMarker) 

請問你能否幫助我,謝謝你的幫助

+0

請清理你的問題,並提供了一個小例子,這凸顯你的問題。 – hammar 2011-05-08 13:49:30

回答

0

由於你正在以PKCS#8格式寫出私人密鑰,所以適當的PEM標題是「BEGIN PRIVATE KEY」(即私人密鑰)。沒有「RSA」)。 PEM數據已包含密鑰的算法,「BEGIN RSA PRIVATE KEY」具有直接編碼的RsaPrivateCrtKeyParameters的含義,這不是您正在寫出的內容。

在將標題更改爲「BEGIN PRIVATE KEY」後,我能夠解析您的示例文件。 ReadObject調用然後返回一個RsaPrivateCrtKeyParameters對象。

相關問題