Listado completo de tutoriales
- 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:
