Intereting Posts

Учетные записи заголовка PHP Soap

Я подключаю Soap к веб-сервису, и мне нужно заполнить учетные данные заголовка, чтобы войти в систему.

$user_id = 'MyUserId'; $unique_key = $this->getUniqueKey(); $base_password = $this->getFieldBase('MyPassword', $uniqueKey); $base_date = $this->getFieldBase(gmdate('Ymd\TH:i:s\.00\Z'), $unique_key); $nonce = $this->getFieldNonce($unique_key, '.myPemFile.pem'); <wss:UsernameToken> <wss:Username>' . $user_id . '</wss:Username> <wss:Password>' . $base_password . '</wss:Password> <wss:Nonce>' . $nonce . '</wss:Nonce> <wss:Created>' . $base_date . '</wss:Created> </wss:UsernameToken> 

Все значения (кроме имени пользователя) соответствуют структуре.

введите описание изображения здесь введите описание изображения здесь введите описание изображения здесь

Я работаю над проектом PHP 5.6, но теперь мне нужно адаптировать его к проекту PHP 7, а это значит, что я больше не могу использовать mcrypt_encrypt() потому что он устарел и поэтому мне нужно использовать openssl_encrypt()

Мои текущие функции:

 private function getFieldBase($data, $key) { $ivsize = openssl_cipher_iv_length('AES-128-ECB'); $iv = openssl_random_pseudo_bytes($ivsize); $ciphertext = openssl_encrypt($data, 'AES-128-ECB', $key, 0, $iv); return trim(base64_encode($ciphertext)); } private function getFieldNonce($data, $pbkey) { openssl_public_encrypt($data, $crypttext, openssl_pkey_get_public(file_get_contents($pbkey))); return base64_encode($crypttext); } private function getUniqueKey() { return substr(md5(uniqid(microtime())), 0, 16); } 

Проблема в том, что при подключении к Webservice я получаю сообщение об ошибке:

Отклонено: Ошибка: ключевой сеанс недействителен. Не удалось расшифровать поле.

Что говорит мне, что моя getFieldBase() неверна.

Solutions Collecting From Web of "Учетные записи заголовка PHP Soap"

Решено .

Параметр RAW_OUTPUT должен быть истинным в функции openssl_encrypt .

 private function getFieldBase($data, $key) { $ivsize = openssl_cipher_iv_length('AES-128-ECB'); $iv = openssl_random_pseudo_bytes($ivsize); $ciphertext = openssl_encrypt($data, 'AES-128-ECB', $key, TRUE, $iv); return base64_encode($ciphertext); }