Anuncios

lunes, 23 de enero de 2012

Encriptación de columnas usando SQL Server


El presente artículo que explica como encriptar una columna en SQL Server utilizando encriptación simétrica.

En ocasiones se hace necesario encriptar datos en las tablas, por ejemplo contraseñas u otras informaciones privadas que no pueden ser expuestas a cualquier consulta. En este artículo se muestra un ejemplo de como encriptar los datos de una columna.

Ejemplo:


/*
Si no existe creamos una llave maestra de encriptación,
indicamos una contraseña que no es más que alguna que
cumpla con las políticas de seguridad que se usan en el servidor
que esta instalada la instancia de SQL Server.
*/

IF NOT EXISTS
(SELECT * FROM sys.symmetric_keys WHERE symmetric_key_id = 101)
CREATE MASTER KEY ENCRYPTION BY
PASSWORD = '23987hxJKL969#ghf0%94467GRkjg5k3fd117r$$#1946kcj$n44nhdlj'
GO

-- Procedemos a crear un certificado

CREATE CERTIFICATE CertificadoPrueba
WITH SUBJECT = 'Para contraseas de usuarios';
GO

/* Creamos la llave simétrica, indicando el nombre que le pondremos
así también el algoritmo que utilizará y el certificado con el que
trabajará, en nuestro ejemplo CertificadoPrueba
*/

CREATE SYMMETRIC KEY LlaveSimetrica
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE CertificadoPrueba;
GO

--Abrimos la llave simétrica que hemos creado, para usarla, 
--con el certificado con el que se creo

OPEN SYMMETRIC KEY LlaveSimetrica
DECRYPTION BY CERTIFICATE CertificadoPrueba;
GO

--Declaramos una variable de tabla para realizar las pruebas

Declare @TablaPrueba Table
(
Usuario varchar(20),
Clave varbinary(128)
)

--Esta variable es para pruebas, contiene la clave que vamos a insertar encriptada

Declare @Contrasea varchar(20);

Set @Contraseña = 'ClavePrueba'

--Insertamos en la tabla encriptando el valor de la contraseña 
--usando la Llave Simétrica creada

Insert @TablaPrueba Values('NombreUsuario',  
ENCRYPTBYPASSPHRASE('LlaveSimetrica', @Contraseña))

--Abrimos la llave simétrica que hemos creado, para usarla, 
--con el certificado con el que se creo

OPEN SYMMETRIC KEY LlaveSimetrica
DECRYPTION BY CERTIFICATE CertificadoPrueba;

--Seleccionamos los valores de la tabla Desencriptados y de la forma encriptada

SELECT CONVERT(varchar(200),DECRYPTBYPASSPHRASE('LlaveSimetrica'Clave)) 
As Desencriptado,
Clave as Encriptada
From @TablaPrueba


Resultado de Consulta:


People who read this post also read :