Codificación y Hash#

Logo PHP

Cifrado de datos con funciones específicas de PHP 7.4

Codificación#

 1<?php
 2
 3    define('METODO','AES-256-CBC'); //En esta constante guardamos el método de encriptación
 4    define('CLAVE_SECRETA','$BE@ppp80'); //Aquí se guardará la clave secreta.
 5    define('SUBCLAVE_SECRETA','99326425'); //Y aquí una clave adicional.
 6
 7    function encriptar($cadena){
 8
 9        $salida = "";
10        $prefijo = hash('sha256', CLAVE_SECRETA); //vamos a encriptar el prefijo de la clave con sha256.
11        $sufijo = substr(hash('sha256', SUBCLAVE_SECRETA), 0, 16); //y ahora vamos a hacer lo mismo con el sufijo añadiendole el método substr().
12
13        $salida = openssl_encrypt($cadena, METODO, $prefijo, 0, $sufijo); // Ahora vamos a escribir en la variable de salida el resultado encriptado de la cadena entrante combinada con el metodo de encriptación, el prefijo, valor 0 y el sufijo.
14        $salida = base64_encode($salida); //finalmente añadimos el metodo de encriptado en base64 para asegurarla más.
15
16        return $salida; //devolvemos el valor de salida.
17
18    }
19
20    $plain_txt = "clave";
21    echo "clave sin encriptar: " . $plain_txt;
22    echo "<br>";
23    echo "clave ya encriptada: " . encriptar($plain_txt); //Ahora aquí vamos a utilizar nuestra función de encriptado con la variable que contiene la clave.
24
25?>
  • Método para descodificar:

 1<?php
 2
 3    define('METODO','AES-256-CBC'); //En esta constante guardamos el método de encriptación
 4    define('CLAVE_SECRETA','$BE@ppp80'); //Aquí se guardará la clave secreta.
 5    define('SUBCLAVE_SECRETA','99326425'); //Y aquí una clave adicional.
 6
 7    function decrypt($cadena){
 8
 9        $prefijo = hash('sha256', CLAVE_SECRETA);
10        $sufijo = substr(hash('sha256', SUBCLAVE_SECRETA), 0, 16);
11        //hasta aqui todo igual, ahora cambiamos encrypt por decrypt e introducimos la cadena desencriptandola con base64_decode y le aplicamos las claves necesarias para desencriptarlo todo junto de nuevo y devolver el valor de salida correspondiente.
12        $salida = openssl_decrypt(base64_decode($cadena), METODO, $prefijo, 0, $sufijo);
13        return $salida;
14    }
15
16    $clave = "cDQwMTBZbmkwS3BwZm9lR1BtYlZJQT09";
17
18    echo "La clave encriptada es: " . $clave;
19    echo "<br>";
20    echo "La clave desencriptada es: " . decrypt($clave);
21
22?>

Generar un Hash con MD5#

1<?php
2
3    $clave = isset($_GET['password']) ? $_GET['password'] : '';
4
5    $salt = '$BE@pppp190716LS%';
6
7    echo "su clave es: " . md5($salt . $clave);
8
9?>

Ingresamos la url: http://localhost:8000/?password=coca-cola para ver el hash generado.

  • Código para descifrar el hash:

 1<?php
 2    $clave = isset($_GET['password']) ? $_GET['password'] : '';
 3
 4    $salt = '$BE@pppp190716LS%';
 5
 6    if(md5($salt . $clave) == '116103ad09bf77e6e771c08dc3f63967'){
 7        echo 'Contraseña correcta';
 8    }
 9    else{
10        echo 'contraseña incorrecta';
11    }
12?>

Ingresamos la url: http://localhost:8000/?password=coca-cola para descifrar el hash.