Encriptar y desencriptar cadena con PHP

Cualquier programador Web ha podido necesitar pasar datos por $_GET – en la url – , es una forma fácil y cómoda de pasar valores de una página a otra, pero… en algunos casos puede no ser recomendable y habría que tener un mínimo de precaución, y para estos casos – y otros muchos – se puede utilizar esta clase que un día vi – no se donde, si lo supiese pondría la fuente – y sobre la que me veo obligado a escribir, mas que nada para tenerla presente yo mismo y darla a conocer a quien pueda necesitarla.

Ya de paso, esto puede servirnos en algún que otro caso para evitar inyecciones SQL, y así evitar que alguien nos mangonee lo que no debe.

Primero: Encriptar

function encrypt($string, $key) {
   $result = '';
   for($i=0; $i<strlen($string); $i++) {
      $char = substr($string, $i, 1);
      $keychar = substr($key, ($i % strlen($key))-1, 1);
      $char = chr(ord($char)+ord($keychar));
      $result.=$char;
   }
   return base64_encode($result);
}

Se utiliza un código secreto, que es el que se pone en $key y que cuando desencriptemos necesitaremos saberlo para que lo haga correctamente.

Para encriptar una cadena escribimos

$cadena_encriptada = encrypt("LA CADENA A ENCRIPTAR","LA CLAVE");

Segundo: Desencriptar

function decrypt($string, $key) {
   $result = '';
   $string = base64_decode($string);
   for($i=0; $i<strlen($string); $i++) {
      $char = substr($string, $i, 1);
      $keychar = substr($key, ($i % strlen($key))-1, 1);
      $char = chr(ord($char)-ord($keychar));
      $result.=$char;
   }
   return $result;
}

Y para desencriptar la cadena escribimos

$cadena_desencriptada = decrypt("LA CADENA ENCRIPTADA","LA CLAVE QUE SE USÓ PARA ENCRIPTARLA");



Josep Viciana

Programador de 27 años con una década de experiencia como programador. interesado en el diseño, ilustración y nuevas tecnologías. Dedicado desde siempre a la programación Web y desde hace algunos años también a la móvil.

72 comentarios

No me funciona, tengo ese problema con la url del + y cuando hago una peticion con urlencode me salta:

Not Found

The requested URL /video/wsO3tcWthWDjmZ2SYamgaX3PwnGmxNa+mvCdldGi3J9nh4m4t6q/5oWEvnu4poLCtYSXnn6WiZXEmoPHfbWqdKPdpoM= was not found on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

Alguna solución en la que no se tenga que usar los caracteres como + ?

Hola, es un articulo muy antiguo, tiene ya 6 años. Seguro que encuentras mejores formas de hacer lo que aquí se propone.
Si quieres usar lo que proponía en su día, creo que en los 63 comentarios que acumula a día de hoy hay algunas respuestas que pueden servirte.
A mí lo primero que se me ocurre es que puedes codificar el valor en criptado en base64 para pasarlo por la url y luego decodificarlo antes de desencriptarlo.

Salud.

para JOSEP VICIANA Mira el código que propone el blog para encriptar y desencriptar se basa en —-base64—- entonces no es ningún aporte nuevo decir que—– “A mí lo primero que se me ocurre es que puedes codificar el valor en criptado en base64 para pasarlo por la url y luego decodificarlo antes de desencriptarlo.”

Deja un comentario

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