¿Cómo encriptar y desencriptar textos y/o passwords con CodeIgniter 3?

02-03-2016 - Andrés Cruz

¿Cómo encriptar y desencriptar textos y/o passwords con CodeIgniter 3?

Este material forma parte de mi curso y libro completo; puedes adquirirlos desde el apartado de libros y/o cursos.

Un punto importante en cualquier sistema que creemos sobre todos los accesibles mediante Internet es que sean "Seguros" para evitar un mal uso de la aplicación lo que llevaría al fracaso de la misma; un aspecto fundamental en esto en la cual se apoyan muchas otras tecnologías como el protocolo HTTPS es el uso de cifrados, encriptación, etc para "garantizar" que la información manejada sea "segura"; un caso más práctico es la de la autenticación:

imagen Autenticación

CodeIgniter no cuenta con un sistema de autenticación y tendrías que emplear una librería de un tercero (que existen varias si buscas un poco por Internet) o crear el nuestro propio; podemos crear fácilmente nuestro propio sistema básico de login si no se requiere de nada muy específico empleando una tabla en base de datos, la sección para registrar los datos y en todo esto es fundamental implementar medidas de seguridad como la que conversamos casi sin ningún esfuerzo; esta medida de seguridad consta en encriptar la contraseña o cualquier otros datos que consideremos como delicados como el código de la tarjeta de crédito.

La clase de encriptación de CodeIgniter -Encrypt Class-

CodeIgniter provee de una clase\librería llamada Encrypt Class que permite encriptar y desencriptar cadenas de texto en base a una llave (key) de condificación; con cadenas de textos se quiere decir nuestras contraseñas, códigos de targetas de crédito, etc.

Antes de poder usar esta librería, debemos establecer el valor de la key que hablamos anteriormente en el archivo de configuración application/config/config.php y buscamos la siguiente línea:

$config['encryption_key'] = '';

Y colocamos una clave de encriptación extraña:

$config['encryption_key'] = 'fs%&/df87&/f';

La llave (key) es una pieza que controla el proceso de encriptación del string que va a ser encriptado; es decir, cuando varíe la llave el resultado que arrojará sobre las cadenas a encriptar serán diferentes.

Ahora referenciamos y cargamos la clase de encriptación desde nuestro controlador en CodeIgniter:

$this->load->library('encrypt'); 

Una vez hecho esto, podemos encriptar una cadena o string empleando el método encode($string):

$msg = 'Un texto cualquiera'; $encrypted_string = $this->encrypt->encode($msg);

Para nuestro ejemplo, retornaría una cadena de texto como la siguiente (empleando la siguiente key):

/ZRStHHe1dUPkK8AHxF/dD1JeMMqSSoh2L+C+7IkNYH2Ung8jJlfVJItWOwZi98VV5L1mcOuoUph7+TGQU0g6Q==

Si deseamos emplear otra llave de encriptación diferente a la definida en el archivo de configuración application/config/config.php podemos emplear un segundo parámetro opcional en la cual especificamos otra llave:

$msg = 'Un texto cualquiera'; 
$key = 'fd(6yf#gfd'; 

$encrypted_string = $this->encrypt->encode($msg, $key);

Y retornaría otra cadena de texto encriptada como en el caso anterior.

Aquí vemos que aunque un supuesto atacante obtenga al menos algunas contraseñas o la tarjetas de crédito o cualquier otro valor delicado, no podrá hacer mucho con él siempre y cuando no obtenga nuestra key y sepa el algoritmo de encriptación lo que se convierte en una importante medida de seguridad que es muy fácil de incorporar.

¿Cómo desencriptar una cadena?

Con esto ya tenemos encriptada nuestra clave; ahora para poder trabajar con ella es necesario desencriptar el texto encriptado para poder trabajar con el mismo; para esto existe el método llamado decode($cadena_encriptada); si queremos recuperar el mensaje de la cadena encriptada anteriormente:

$encrypted_string = '/ZRStHHe1dUPkK8AHxF/dD1JeMMqSSoh2L+C+7IkNYH2Ung8jJlfVJItWOwZi98VV5L1mcOuoUph7+TGQU0g6Q==';

$this->encrypt->decode($encrypted_string);

Obtenemos nuevamente el mensaje:

Un texto cualquiera

También tienes la posibilidad de emplear una llave de encriptación que sea diferente a la definida en el archivo application/config/config.php aunque esta debe ser la misma empleada al momento de la encriptación:

$encrypted_string = $this->encrypt->decode($msg, $key);

Con la encriptación en CodeIgniter se generan cadenas largas las cuales varían aunque se trate de la misma cadena fuente y como vimos ,a encriptación puede ser revertida empleando la misma llave (key).

Consideraciones para el proceso de autenticación en CodeIgniter

Con esto vimos lo sencillo que es emplear esta clase en CodeIgniter; esta clase es idónea para trabajar con campos de alta confidencialidad como en el caso de contraseñas o password, las cuales se recomiendan encriptar apenas se reciba e inclusive guardar estas encriptadas en base de datos y solo desencriptar las mismas al momento de verificar las credenciales o procesar las mismas; con estas sencillas modificaciones se logra crear una capa adicional de seguridad que en el caso de que alguien vulnere nuestra base de datos no podrá tener acceso a la contraseña desencriptada y por lo tanto no podría hacer absolutamente nada con esos datos.


Andrés Cruz
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz en Udemy

Acepto recibir anuncios de interes sobre este Blog.

Conozca nuestros cursos sobre Laravel, CodeIgniter, Flutter, Electron, Django, Flask y muchos más!

Ver los cursos
¡Hazte afiliado en Gumroad!

!Cursos desde!

4$

En Academia

Ver los cursos

!Libros desde!

1$

Ver los libros
!Web Alojada en Hostinger!