Necesito encriptar algunos campos de encabezado SOAP y actualmente tengo el siguiente código funcionando en un proyecto con la versión PHP 5.6.
function getBaseEncoded($data, $key) { $size = $this->pkcs5_pad($data, mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB)); $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB), MCRYPT_RAND); $result = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $size, MCRYPT_MODE_ECB, $iv); return trim(base64_encode($result)); } private function pkcs5_pad($text, $blocksize) { $pad = $blocksize - (strlen($text) % $blocksize); return $text . str_repeat (chr($pad), $pad); }Lo que pasa es que ahora tengo en mis manos un proyecto similar pero con PHP 7, y la función MCRYPT está obsoleta y necesito cambiarla a OPENSSL_ENCRYPT.
El siguiente código es mi primer intento:
function getBaseEncoded($data, $key) { $result = openssl_encrypt($data, 'AES-128-ECB', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING); return trim(base64_encode($result)); }Pero ahora recibo un error SOAP con el mensaje
SoapFault => No se pudo conectar al host
y me hizo pensar si el problema está en mi nueva función?
Le faltan algunos datos del vector inicializador.
$ivsize = openssl_cipher_iv_length('AES-128-ECB'); $iv = openssl_random_pseudo_bytes($ivsize); $ciphertext = openssl_encrypt( $data, 'AES-128-ECB', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv );echo encrypt_openssl($data, $key); function encrypt_openssl($msg, $key, $iv = null) { $iv_size = openssl_cipher_iv_length('AES-128-ECB'); if (!$iv) { $iv = openssl_random_pseudo_bytes($iv_size); } $encryptedMessage = openssl_encrypt($msg, 'AES-128-ECB', $key, OPENSSL_RAW_DATA, $iv); return base64_encode($iv . $encryptedMessage); }