Encriptar y desencriptar cadenas de texto con PHP
PHP es uno de los lenguajes de programación más populares gracias a Facebook y Wordpress, pero la popularidad no indica que es el mejor o el más seguro para programar. Sin embargo, muchos proyectos de bajo costo son desarrollados en este lenguaje.
Te dejo una alternativa para encriptar cadenas de texto. Para esta ocasión usaremos OpenSSL.
function openCypher ($action='encrypt',$string=false)
{
$action = trim($action);
$output = false;
$myKey = 'oW%c76+jb2';
$myIV = 'A)2!u467a^';
$encrypt_method = 'AES-256-CBC';
$secret_key = hash('sha256',$myKey);
$secret_iv = substr(hash('sha256',$myIV),0,16);
if ( $action && ($action == 'encrypt' || $action == 'decrypt') && $string )
{
$string = trim(strval($string));
if ( $action == 'encrypt' )
{
$output = openssl_encrypt($string, $encrypt_method, $secret_key, 0, $secret_iv);
};
if ( $action == 'decrypt' )
{
$output = openssl_decrypt($string, $encrypt_method, $secret_key, 0, $secret_iv);
};
};
return $output;
};
Lo primero que debemos hacer es cambiar $myKey
y $myIV
por cadenas de texto complejas para garantizar respuestas encriptadas lo más seguras posible. También pueden cambiar el método de encriptación de $encrypt_method
aunque personalmente prefiero AES-256-CBC
por ser uno de los más seguros y por la respuesta de cadenas cortas.
$myText = 'This is my secure text';
Veamos como encriptar:
$myText_encrypted = openCypher('encrypt',$myText);
echo $myText_encrypted;
// RESPUESTA: xrgFsPYDTxCBQbxbIteSmSJLaHlaGVmlV5oNIqvW9Sk=
Ahora desencriptemos la respuesta anterior:
$myText_decrypted = openCypher('decrypt',$myText_encrypted);
echo $myText_decrypted;
// RESPUESTA: This is my secure text
La función convierte a SHA256 $myKey
y $myIV
para triplicar el nivel de seguridad pero es importante destacar que nada garantiza que pueda aparecer alguien que logre romper nuestro código. Lo más importante acá es evitar por todos los medios dejar público a $myKey
y $myIV
.