Я подключаю 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()
неверна.
Решено .
Параметр 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); }