Listado completo de tutoriales
84 - Encriptación de datos (aes_encrypt - aes_decrypt) |
Si necesitamos almacenar un valor que no queremos que se conozca podemos encriptar dicho valor, es decir, transformarlo a un código que no pueda leerse.
La primeras versiones de MySQL contaban con dos funciones llamadas "encode" para encriptar una cadena y "decode" para desencriptarla.
El algoritmo que emplean las funciones antes nombradas son actualmente vulnerables y no deben utilizarse (en la versión 8.x de MySQL se han eliminado), en su lugar contamos con otras dos funciones llamadas "aes_encrypt" y "aes_decrypt".
Estas dos funciones permiten encriptar y desencriptar datos usando el algoritmo oficial AES (Advanced Encryption Standard) que actualmente es el más seguro.
La sintaxis de la función aes_encrypt es:
aes_encrypt("dato a encriptar","clave de encriptación")
La función recibe dos parámetros, el dato a cifrar y la clave que nosotros definimos. Retorna un valor de tipo blob.
Luego en la tabla almacenamos el dato encriptado (blob), si alguien puede acceder a los datos de la tabla no podrá conocer el valor real almacenado debido a que está cifrado.
Ingresemos al programa "Workbench" y ejecutemos el siguiente bloque de instrucciones SQL:
drop table if exists clientes; create table clientes( nombre varchar(50), mail varchar(70), tarjetacredito blob, primary key (nombre) ); insert into clientes values ('Marcos Luis','marcosluis@gmail.com',aes_encrypt('5390700823285988','xyz123')); insert into clientes values ('Ganzalez Ana','gonzalesa@gmail.com',aes_encrypt('4567230823285445','xyz123')); insert into clientes values ('Lopez German','lopezg@yahoo.com',aes_encrypt('7840704453285443','xyz123')); -- Si accedemos al campo tarjetacredito podemos comprobar que se encuentra cifrado. select tarjetacredito from clientes; -- Para descifrar la tarjeta de crédito debemos conocer la clave de cifrado: 'xyz123': select cast(aes_decrypt(tarjetacredito, 'xyz123') as char) from clientes;
Genera una salida similar a esta: