RedSys, mycrypt, openssl y servidor con PHP 7.1

Resulta que en ocasiones cuando actualizas el servidor y pasas a poner una versión de PHP más reciente, como por ejemplo la 7.1.X como es en uno de los casos que estamos tratanso, hay funciones que dejan de utilizarse (deprecated) como mycrypt y hay que utilizar otra opción como puede ser openssl_encrypt.

Dicho de otro modo, actualizo a PHP 7.1.X y la función que utilizaba antes para crear la encriptación 3DES necesaria para la pasarela de RedSys deja de funcionar, y por lo tanto, la pasarela RedSys que tenía dejar de funcionar. Fijaos la función que tenía anteriormente:

1
2
3
4
5
6
7
8
function encrypt_3DES($message, $key) {
  // Se establece un IV por defecto
  $bytes = array(0, 0, 0, 0, 0, 0, 0, 0);
  $iv = implode(array_map("chr", $bytes));
  // Se cifra
  $ciphertext = mcrypt_encrypt(MCRYPT_3DES, $key, $message, MCRYPT_MODE_CBC, $iv);
  return $ciphertext;
}

Pues bien. La función mcrypt_encrypt en PHP 7.1.X no puede utilizarse y hay que optar por una nueva función: openssl_encrypt

Cómo quedaría la función que genera la encriptación 3DES para la psarela? utilizaremos la función openssl_encrypt con los siguientes parámetros:

1
2
3
4
function encrypt_3DES($message, $key) {
  $l = ceil(strlen($message) / 8) * 8;
  return substr(openssl_encrypt($message . str_repeat("\0", $l - strlen($message)), 'des-ede3-cbc', $key, OPENSSL_RAW_DATA, "\0\0\0\0\0\0\0\0"), 0, $l);
}

Está comprobado que funciona. Si queréis saber algo más al respecto, podéis visitar el siguiente enlace.

Más información

Artículos relacionados

PayPal cambia a TLS1.2 y HTTP 1.1 en junio del 201... Pues sé, por el bien de la seguridad, PayPal este junio cambiarà el protocolo de comunicación a TLS 1.2. Si tu servidor no lo soporta, no podrás conec...
Disco duro lleno en servidor – Limpieza de l... Vaya faena que veas que de repente el servidor deje de funcionar, y sea porque els disco duro esté lleno. Salen errores, normalmente relacionados con ...
LAMPP y XAMPP – Usuario FTP por defecto Lo que a continuación voy a detallar, sólo es válido para servidores web LAMPP y XAMPP instalados en local. Instalamos nuestro servidor en local, lo p...
Servidor Linux – Saber carpeta extension_dir... Un post cortito. Cuando instalamos nuevos módulos para PHP, como puede ser el caso de un módulo para conectarse a un servidor de base de datos de Micr...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*