【问题标题】:OpenSSL PHP RSA Encryption: Which library to use to decrypt on client side?OpenSSL PHP RSA 加密:在客户端使用哪个库解密?
【发布时间】:2012-02-06 04:05:17
【问题描述】:

我开发了一个桌面应用程序 (.NET 2.0),它需要从运行 php/mysql 的服务器获取一些信息。服务器端的提供商决定使用 openssl_private_encrypt 方法进行加密,并为我提供了一个 publickey.pem 文件。我不擅长 php/mysql,但我知道如果我使用 asp .net 不会有任何不同。

我的问题是如何解密 .NET 2.0 应用程序中的私有加密数据。我所有使用带有公钥的 RSACrypoServiceProvider 的尝试都被证明是不成功的。

我偶然发现了 ManagedOpenSSL 库,但这也不好。

我确信 StackOverflow 的许多人都会做类似的事情,如果知道他们是如何做到的,那就太好了。

提前感谢您的所有帮助。

【问题讨论】:

    标签: openssl rsa rsacryptoserviceprovider


    【解决方案1】:

    .NET 使用 OpenSSL 不支持的 XML 格式的密钥。我的建议是使用phpseclib, a pure PHP RSA implementation 生成密钥对 - 或至少将现有密钥对转换为 XML。

    【讨论】:

    • 谢谢纽伯特。但是,生成密钥对意味着我要求服务器管理员使用我生成的私钥,我认为他们不会接受这样的请求。我将在下面发布答案。但是,我认为经过几个小时的打击和试验后,我设法让它工作了。我使用了 BouncyCastle,然后进行了一些尝试,设法弄明白了。
    【解决方案2】:

    这是我用来让它工作的!

                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 被正确解密。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多