Stored Procedure para guardar y devolver datos encriptados con AES (MySQL)

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
Anuncios

Un comentario en “Stored Procedure para guardar y devolver datos encriptados con AES (MySQL)

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s