2012-02-06 2 views
0

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

Мой вопрос заключается в том, как дешифровать конфиденциально-зашифрованные данные в приложении .NET 2.0. Все мои попытки использовать 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 использует XML-форматированные ключи, которые OpenSSL не поддерживает. Моя рекомендация заключалась бы в создании пары ключей - или, по крайней мере, преобразования существующего в XML - с phpseclib, a pure PHP RSA implementation.

+0

Thanks newbert. Однако создание ключевой пары означало бы, что я попрошу администратора сервера использовать закрытый ключ, который я создаю, и я не думаю, что они будут развлекать такие запросы. Опубликуйте ответ ниже. Но, я думаю, мне удалось заставить его работать после нескольких часов хита и испытания. Я использовал BouncyCastle, а затем с небольшим количеством хитов удалось понять это. – Digvijay

Смежные вопросы