2011-09-24 50 views
1

我需要從證書中查找公鑰作爲xml字符串。我可以把公鑰只作爲一個字符串與這種方法:從證書中查找公鑰作爲xml字符串

public string CelesiPublik() 
    { 
     X509Certificate cer; 
     cer = X509Certificate.CreateFromCertFile("C://certificate//EdonBajrami.crt"); 

     string Celesi = cer.GetPublicKeyString(); 
     return Celesi; 
    } 

然後我把這個值的另一種方法。 Celesi值現在已經採取celesiPublik

celesiPublik = e.Result; 
    string NrTelefonit = "044-419-109"; 
    string salt = "VotimiElektronikKosove"; 
    AesManaged aes = new AesManaged(); 
    Rfc2898DeriveBytes rfc2898 = new Rfc2898DeriveBytes(celesiPublik,Encoding.UTF8.GetBytes(salt)); 
      aes.Key = rfc2898.GetBytes(aes.KeySize/8); 
      RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); 
      rsa.FromXmlString(celesiPublik); 
      rsa.Encrypt(aes.Key, false); 

但它顯示我錯誤。我該如何解決這個問題?


GregS我無法在Windows Phone 7中使用X509Certificate2。我拿我的公鑰與方法:

`X509Certificate cer = new X509Certificate("C://certificate//EdonBajrami.crt"); 
     string publicKey = cer.GetPublicKeyString();` 

我可以採取公鑰。然後,在另一種方法我把公鑰的值到另一個字符串變量鍵:

`string Key = publicKey; 
    //-----First------ 
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); 
      //---------- 
      RSAParameters RSAKeyInfo = new RSAParameters(); 
      byte[] celesibyte = System.Text.Encoding.UTF8.GetBytes(celesiPublik); 
      byte[] Exponent = { 1, 0, 1 }; 

      RSAKeyInfo.Modulus = celesibyte; 
      RSAKeyInfo.Exponent = Exponent; 
      rsa.ImportParameters(RSAKeyInfo); 
      //----------- 
      /* rsa.FromXmlString(celesi2Publik); */ 
      string edon = "Edon"; 
      byte[] edon1 = Encoding.UTF8.GetBytes(edon); 
      byte[] edon2 = rsa.Encrypt(edon1, false);' 

,但它向我發送的字節506,我不明白爲什麼,什麼是一個問題的數據?

回答

2

據我所知,X509Certificate類幾乎沒用。也許這就是爲什麼有一個類X509Certificate2?使用X509Certificate2類。您可以使用以下公鑰直接創建RSACryptoServiceProvider

X509Certificate2 cert = new X509Certificate2(X509Certificate.CreateFromCertFile("C://certificate//EdonBajrami.crt")); 
RSACryptoServiceProvider rsa = (RSACryptoServiceProvider) cert.PublicKey.Key;