Esto llevaba un tiempo en el TODO list del blog, y a raíz de unos comentarios en el artículo sobre encriptación AES en MySQL y MariaDB he decidido hacerlo al fin. La cosa es que queremos guardar un dato encriptado en la base de datos pero de forma que sea transparente para el usuario, que cuando pide el dato lo recibe en texto plano.
El primer punto a la hora de guardar datos encriptados en AES es que debemos almacenarlo en un campo de tipo BLOB, ya que este algoritmo nos devolverá un resultado binario, no texto plano.
Por resumir vamos a imaginar una tabla que sólo tiene un Id autonumérico y un campo con un texto encriptado. Habrá dos procedimientos: uno para insertar los datos y otro para recuperarlos.
El procemiento que inserta sería así:
CREATE PROCEDURE sp_insertDatoEncriptado (IN `texto` varchar(128), IN `password` varchar(25)) DETERMINISTIC BEGIN Insert Into tabla (`TextoSecreto`) Values (AES_ENCRYPT(texto,password)) END
Y para recuperar los datos la cosa iría por este camino:
CREATE PROCEDURE sp_getDatoEncriptado (IN `password` varchar(25)) DETERMINISTIC BEGIN Select Id, AES_DECRYPT(TextoSecreto, password) AS 'TextoSecreto' From tabla END
Muchas gracias Donnie!!! Este finde le inco el diente 😉