DEV Community

Rodrigo Garcia Trejo
Rodrigo Garcia Trejo

Posted on

SQL | Cifrar datos

Hola a todos

Hoy les quiero compartir un código hecho en php para poder cifrar los datos de su base de datos y poder descencriptarlos esto con la finalidad de mejorar la seguridad de sus BD.

Quiero aclarar que este codigo lo obtuve de el video de lastDragon solo lo mejore un poco

Link del video de last dragon

<?php
class Encriptar
{
    private $llave;
    private $vector;

    public function __construct($llave = 'AQUI VA TU LLAVE', $vector = 'AQUI VA TU VECTOR TIENE QUE TENER SOLO 16 CARACTERES')
    {
        $this->llave = $llave;
        $this->vector = $vector;
    }

    public function cifrar($texto)
    {
        // Convertir el texto a base64 para manejar comillas simples y caracteres especiales
        $textoCodificado = base64_encode($texto);
        $cifrado = openssl_encrypt($textoCodificado, 'aes-256-cbc', $this->llave, OPENSSL_RAW_DATA, $this->vector);
        if ($cifrado === false) {
            throw new Exception('Error al cifrar los datos.');
        }
        return base64_encode($cifrado);
    }

    public function descifrar($cifrado)
    {
        $descifrado = openssl_decrypt(base64_decode($cifrado), 'aes-256-cbc', $this->llave, OPENSSL_RAW_DATA, $this->vector);
        if ($descifrado === false) {
            throw new Exception('Error al descifrar los datos.');
        }
        // Decodificar desde base64 para obtener el texto original
        return base64_decode($descifrado);
    }
}
Enter fullscreen mode Exit fullscreen mode

Ejemplo de uso

<?php
    include_once "encriptar.php";

    $Encriptar= new Encriptar();
    $encriptado =  $Encriptar->cifrar("Texto a encriptar");

    echo "Texto cifrado es: " . $encriptado;

    // DESCENCRIPTANDO ...
    echo "Texto descifrado es: " .$Encriptar->descifrar($encriptado);


Enter fullscreen mode Exit fullscreen mode

¿Que es OPENSSL_ENCRYPT?

openssl_encrypt es una función en PHP que se utiliza para cifrar datos utilizando la biblioteca OpenSSL. OpenSSL es una biblioteca de código abierto que proporciona implementaciones de varios protocolos de seguridad, incluyendo SSL (Secure Sockets Layer) y TLS (Transport Layer Security), así como algoritmos de cifrado y funciones criptográficas.

La función openssl_encrypt se utiliza para cifrar datos utilizando diferentes algoritmos de cifrado simétrico, como AES (Advanced Encryption Standard), DES (Data Encryption Standard), y otros. Permite cifrar datos utilizando una clave secreta y, opcionalmente, un vector de inicialización (IV) para mejorar la seguridad.

Aquí tienes un ejemplo simple de cómo se utiliza openssl_encrypt en PHP:

$data = "Hola, mundo!";
$clave = "MiClaveSecreta";
$iv = random_bytes(16); // Vector de inicialización aleatorio

$cifrado = openssl_encrypt($data, 'AES-256-CBC', $clave, 0, $iv);

echo "Texto cifrado: " . $cifrado;
Enter fullscreen mode Exit fullscreen mode

En este ejemplo, estamos cifrando el mensaje "Hola, mundo!" utilizando el algoritmo AES-256 en modo CBC (Cipher Block Chaining) con una clave secreta y un IV generados aleatoriamente.

Es importante destacar que el uso seguro de openssl_encrypt implica la gestión adecuada de las claves y otros parámetros de seguridad, así como el almacenamiento seguro de dichas claves. El cifrado es una parte fundamental de la seguridad de datos, y su implementación incorrecta puede llevar a vulnerabilidades de seguridad.

Top comments (0)