2012-02-06 81 views
0

我開發了一個桌面應用程序(.NET 2.0),它需要從運行php/mysql的服務器獲取一些信息。服務器端的提供者已決定使用openssl_private_encrypt方法進行加密,併爲我提供了一個publickey.pem文件。我不擅長PHP/MySQL,但我知道如果我使用asp.net,它不會有任何不同。OpenSSL PHP RSA加密:在客戶端使用哪個庫進行解密?

我的問題是我如何解密.NET 2.0應用程序中的私有數據。我所有嘗試使用publickey的RSACrypoServiceProvider都被證明不成功。

我偶然發現了ManagedOpenSSL庫,但那也不行。

我確定很多在StackOverflow會做類似的東西,這將是很好的知道他們是如何做到的。

請提前感謝您的幫助。

回答

0

這是我用它做的工作!

  HttpWebResponse response = (HttpWebResponse) request.GetResponse(); 
      string responseFromServerEnc = string.Empty; 

      byte[] data = null; 

      if (HttpStatusCode.OK == response.StatusCode) 
      { 
       MemoryStream memoryStream = new MemoryStream(0x10000); 

       using (Stream responseStream =   request.GetResponse().GetResponseStream()) 
       { 
        byte[] buffer = new byte[0x1000]; 
        int bytes; 
        while ((bytes = responseStream.Read(buffer, 0, buffer.Length)) > 0) 
        { 
         memoryStream.Write(buffer, 0, bytes); 
        } 

        data = memoryStream.ToArray(); 
       } 

       response.Close(); 
      } 


      const string pubKey = "-----BEGIN PUBLIC KEY-----\n key from .pem file \n-----END PUBLIC KEY-----"; 
      PemReader pem = new PemReader(new StringReader(pubKey)); 
      RsaKeyParameters bcp = (RsaKeyParameters)pem.ReadObject(); 

      string responseFromServer = Encoding.UTF8.GetString(Decrypt(data,bcp)); 

而responseFromServerEnc是加密消息,responseFromServer被正確解密。

0

.NET使用OpenSSL不支持的XML格式的密鑰。我的建議是用phpseclib, a pure PHP RSA implementation來生成密鑰對 - 或者至少將現有的密鑰對轉換爲XML。

+0

謝謝紐伯特。然而,生成一個密鑰對意味着我要求服務器管理員使用我生成的私鑰,我不認爲他們會招待這樣的請求。 我會在下面發表答案。 但是,我想我在經過幾個小時的命中和試用之後才設法讓它工作。我用BouncyCastle,然後用一點點擊和試用來設法解決它。 – Digvijay 2012-02-09 08:35:06