Encriptar y desencriptar información

La información es muy valiosa y en algunos casos puede motivar a personas a intentar hackear tu servidor o aplicación, para poder robarla. Una práctica común y muy necesaria hoy en dia, es añadir una capa de seguridad para esta información, encriptando los datos más importantes, haciéndolos inútil para cualquier persona que logre robarla.

Como encriptar información usando PHP

Primero crea un archivo llamado mcript.php en tu servidor con este código:

<?php
//Configuración del algoritmo de encriptación

//Debes cambiar esta cadena, debe ser larga y unica
//nadie mas debe conocerla
$clave  = 'Una cadena, muy, muy larga para mejorar la encriptacion';

//Metodo de encriptación
$method = 'aes-256-cbc';

// Puedes generar una diferente usando la funcion $getIV()
$iv = base64_decode("C9fBxl1EWtYTL1/M8jfstw==");

 /*
 Encripta el contenido de la variable, enviada como parametro.
  */
 $encriptar = function ($valor) use ($method, $clave, $iv) {
     return openssl_encrypt ($valor, $method, $clave, false, $iv);
 };

 /*
 Desencripta el texto recibido
 */
 $desencriptar = function ($valor) use ($method, $clave, $iv) {
     $encrypted_data = base64_decode($valor);
     return openssl_decrypt($valor, $method, $clave, false, $iv);
 };

 /*
 Genera un valor para IV
 */
 $getIV = function () use ($method) {
     return base64_encode(openssl_random_pseudo_bytes(openssl_cipher_iv_length($method)));
 };

No olvides cambiar el texto en la variable $clave y generar otro valor para $iv. En el código anterior está toda la configuración para que puedas encriptar o desencriptar cualquier variable, también hay dos funciones que puedes usar para encriptar y desencriptar respectivamente. Y una tercera para generar un valor para la variable $iv.

Aquí hay un ejemplo de cómo puedes usarlas, solo debes crear un archivo con este código:

<?php
include "mcript.php";

// Como usar las funciones para encriptar y desencriptar.
$dato = "Esta es información importante";

//Encripta información:
$dato_encriptado = $encriptar($dato);

//Desencripta información:
$dato_desencriptado = $desencriptar($dato_encriptado);

echo 'Dato encriptado: '. $dato_encriptado . '<br>';
echo 'Dato desencriptado: '. $dato_desencriptado . '<br>';

echo "IV generado: " . $getIV();

Puedes usar las funciones $encriptar() y $encriptar. Si te preguntas por que las funciones parecen ser variables y llevan un signo de $… bueno esto es por que las declare como funciones anónimas, actualmente esta es la mejor práctica para compartir variables entre dos funciones, sin tener que recibirlas como parámetros o crear una clase. De esta forma no necesitas enviar en cada función los datos de encriptación.



2 pensiamientos en “Como encriptar y desencriptar información en PHP

  • Natanael

    Al aplicar el codigo me genera signos de + por lo que al pasar el resultado encriptado mediante GET pierdo el valor ya que interpreta el + como un espacio en blanco. Que recomiendas?

    Responder
    • lcruz

      Hola, si estás enviando algo por GET, entonces debes codificarlo primero usando la función urlencode(), luego cuando la lees la decodificas usando urldecode()

      Responder

Deja un comentario

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