Мне нужно подключиться к определенному веб-сервису, который использует шифрование RSA. Используя NuSOAP и PHPseclib, я могу подключиться к серверу, чтобы получить открытый ключ, используемый для шифрования RSA, и отправить данные обратно на сервер.
Проблема возникает в том, как они шифруют данные, разработчик дал мне документацию и образец, написанный на C #, который трудно понять и преобразовать в PHP. Единственное, что нужно зашифровать, это пароль.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dns.Lib.Compression;
using Dns.Lib.Security.Cryptography;
using ThirdPartyTest.ThirdPartyService;
using SoapExtensionLib;
private static string BaseServiceCall(int sysUserId, string password)
{
SecureMessageManager secureMessageManager = new SecureMessageManager();
ThirdPartyService.Main client = new ThirdPartyService.Main();
string dnPublicKey = client.GetPublicKey();//this is used to get the pbKey
secureMessageManager.ImportThirdPartyRSAKey(dnPublicKey);
string sessionId = Guid.NewGuid().ToString("N");
string tokenRequestXml = @"<request>
<id>" + sysUserId + @"</id>
<password>" + secureMessageManager.RSAEncryptString(password) + @"</password>
<session>" + sessionId + @"</session>
<public>" + secureMessageManager.ExportPublicKey() + @"</public>
</request>";
string tokenResonse = client.GetSommething(tokenRequestXml);
//...
}
И что делает secureMessageManager.ExportPublicKey()
?
Вот моя версия PHP выше.
require_once('RSA-PHPseclib0.3.5/Crypt/RSA.php');
require_once('nusoap.php');
$sysUserId = '.....';
$pass = '.....';
$sessionId = session_id();
$pubKey = "<rsakeyvalue><modulus>kdT4UUBowCepvTU3panVLnAWqKSIik8eSc5Sog0e7BOP2EoNVwer5RfxIICaWzVpJtPAQJYQ9AaW4qpp3qIw3g3DR7OTw/lvif6y5VemiRue6u4T2eef4AG3Ka0MoMhTtMxIRXGNqx6hPyPn40F9ZMFwprFupFl0Z2LPRLR3Fek=</modulus><exponent>AQAB</exponent></rsakeyvalue>";//The Public key received from an other program
$rsa = new Crypt_RSA();
$return = $rsa->loadKey($pubKey);
$password = base64_encode($rsa->encrypt($pass));
$inputData = "<request><id>$sysUserId</id><password>$password</password><session>$sessionId</session><public>$pubKey</public></request>";
$params = array('inputData'=>$inputData);
$result = $client->call('GetSommething', $params, $namespaces, '', '',null,'document','literal');
Ошибка, которую я получаю от их сервера, - 'Server was unable to process request. ---> Error occurred while decoding OAEP padding.'
. Я понял, что это как-то связано с тем, как я шифрую пароль. Проведя более 40 часов, ударяясь о кирпичную стену, не знаю, что делать.
SecureMessageManager
, вероятно, является классом, созданным из одной из включенных библиотек. Я надеюсь, что кто-то знает об этом и может разъяснить - person fredtma   schedule 29.11.2013echo $rsa;
- person neubert   schedule 29.11.2013<rsakeyvalue><modulus>kdT4UUBowCepvTU3panVLnAWqKSIik8eSc5Sog0e7BOP2EoNVwer5RfxIICaWzVpJtPAQJYQ9AaW4qpp3qIw3g3DR7OTw/lvif6y5VemiRue6u4T2eef4AG3Ka0MoMhTtMxIRXGNqx6hPyPn40F9ZMFwprFupFl0Z2LPRLR3Fek=</modulus><exponent>AQAB</exponent></rsakeyvalue>
я сохранил его в сеансе, потому что он был сгенерирован с другой страницы - person fredtma   schedule 29.11.2013