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