0

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

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

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

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

提前感谢您的所有帮助。

4

2 回答 2

0

.NET 使用 OpenSSL 不支持的 XML 格式的密钥。我的建议是使用phpseclib(一种纯 PHP RSA 实现)生成密钥对 - 或至少将现有密钥对转换为 XML 。

于 2012-02-07T18:10:14.573 回答
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 被正确解密。

于 2012-02-09T08:40:27.780 回答