Esta librería en PHP permite Encriptar y Desencriptar de una manera muy simple y rápida, incluyendo una clave previamente dada. Y los mas importante manea varios algoritmos de cifrado que se pueden probar.
Buenas señores esta vez les traigo un paquete muy útil en cuestión de seguridad que se puede utilizar de manera muy fácil y sobre todo rápida en sus sistemas basados en PHP. Así que no necesitaremos ser expertos en la materia para poder utilizar esta librería.
Como siempre este es un aporte de Jhon Conde quien hizo su aporte en PHPClasses, que saben que soy seguidor y que realizan muy buenos aportes para utilizarlos en PHP. También pueden visitar y/o hacerle seguimiento a su repositorio en GitHub.
Primeros Pasos:
Requisitos
Lo primero hay que mencionar que este librería solo puede ser utilizada en las ultimas versiones de PHP, pues los requisitos son:
- PHP 7.2
- Extension OpenSSL
Instalación
El mismo desarrollador indica que pueden incluirlo en un archivo de auto carga, de la siguiente manera:
require ( './vendor/autoload.php' ) ;
Uso Básico
Para cifrar correctamente un texto y/o datos necesitamos lo siguiente:
- Una clave secreta (piensen en esto como la contraseña del texto cifrado)
- Cree un vector de inicialización (IV) seguro y generado aleatoriamente
- Cifre el texto usando la clave secreta y IV
- Almacene de forma segura la clave secreta y el IV para su uso posterior para descifrar el texto cifrado.
Los pasos para descifrar correctamente el texto cifrado son los siguientes:
- Recupere de forma segura la clave secreta y la IV
- Descifra el texto usando la clave secreta y IV
Ahora bien, aqui les muestro en codigo como se tendria que utilizar en un ejercicio muy simple.
use Encryption\Encryption;
use Encryption\Exception\EncryptionException;
$text = 'Testing, testing, 123';
$key = 'secretkey';
try {
$encryption = Encryption::getEncryptionObject();
$iv = $encryption->generateIv();
$encryptedText = $encryption->encrypt($text, $key, $iv);
$decryptedText = $encryption->decrypt($encryptedText, $key, $iv);
printf('Cipher : %s%s', $encryption->getName(), PHP_EOL);
printf('IV : %s%s', base64_encode($iv), PHP_EOL);
printf('Encrypted: %s%s', $encryptedText, PHP_EOL);
printf('Decrypted: %s%s', $decryptedText, PHP_EOL);
}
catch (EncryptionException $e) {
echo $e;
}
El resultado de salida seria:
Cipher : AES-256-CBC
IV : Cz5BfO8PDgwFTlDNXoFiAQ==
Encrypted: Hj3xYHJnTWq5ZkHRGbnGdh4qRXd3PEzgI0Rbru9GynY=
Decrypted: Testing, testing, 123
Notas Importantes
- Notarán que la clave secreta está en texto plano en el ejemplo anterior. Este valor es algo que pueden crear de la manera que quieran. La aleatoriedad no se considera importante aquí. Sin embargo, su vector de inicialización (IV) debe ser lo más aleatorio posible. Un error común en el que caen los desarrolladores al crear un IV es elegir un método de generación que sea insuficientemente aleatorio si es aleatorio.
- Estas claves son generadas mediante
openssl_random_pseudo_bytes()
el cual genera una cadena criptológicamente fuerte y puede ser fácilmente actualizado o reemplazado por cualquier otro método que genere una mejor solución. - Por defecto, PHP Simple Encryption usa el AES con encriptación de 256 bits en modo CBC (Cipher Blocker Chaining) (AES-256-CBC) de maner apredeterminada, el cual puede ser reemplazado por otro metodo de cifrado que se adecue a su sistema o negocio para trabajar con un tercero o si su sistema es un poco antiguo. Se puede hacer de esta forma:
$ encryption = Encryption::getEncryptionObject('SM4-CFB') ;
- Les muestro una lista de los cifrados admitidos de PHP Simple Encryption a partir del lanzamiento de la versión 1.0.0 en este enlace
Finalmente señores, este software es de libre acceso y distribución asi que siéntanse libres de descargarlo e implementar en cualquiera de sus proyectos, y también en contribuir con sus conocimientos.