OpenSSL PHP RSA Encryption: какую библиотеку использовать для расшифровки на стороне клиента? - PullRequest
0 голосов
/ 06 февраля 2012

Я разработал настольное приложение (.NET 2.0), и оно должно получать некоторую информацию с сервера, на котором работает php / mysql.Поставщик на стороне сервера решил использовать шифрование с использованием метода openssl_private_encrypt и предоставил мне файл publickey.pem.Я не очень хорошо разбираюсь в php / mysql, но знаю, что если бы я использовал asp .net, то ничего не изменилось бы.

Мой вопрос: как мне расшифровать зашифрованные данные в приложении .NET 2.0?,Все мои попытки использовать RSACrypoServiceProvider с publickey оказались безуспешными.

Я наткнулся на библиотеку ManagedOpenSSL, но это тоже не принесло пользы.

Я уверен, что многие в StackOverflow сделали бы подобноебыло бы неплохо узнать, как они это сделали.

Заранее признателен за всю вашу помощь.

Ответы [ 2 ]

0 голосов
/ 09 февраля 2012

Вот что я использовал, чтобы это работало!

            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 голосов
/ 07 февраля 2012

.NET использует ключи в формате XML, которые OpenSSL не поддерживает. Я бы порекомендовал сгенерировать пару ключей - или, по крайней мере, преобразовать существующую в XML - с помощью phpseclib, чистой реализации PHP RSA .

...