lunes 22 de noviembre de 2010

SQL Server - Encriptación

3 FORMAS DE ENCRIPTAR: Mediante claves simétricas, asimétricas y certificados

-- CLAVES SIMETRICAS
-- -----------------

-- CREACION DE CLAVE (SIMETRICA)
CREATE SYMMETRIC KEY CLAVE_DE_PRUEBA
WITH ALGORITHM = TRIPLE_DES
ENCRYPTION BY PASSWORD = 'MAMATEQUIEROMUCHO'


DECLARE @ORIGINAL AS VARCHAR(50)
DECLARE @CIFRADO AS VARBINARY(MAX)
SET @ORIGINAL = 'Menuda mierda de día'


-- ENCRIPTADO
OPEN SYMMETRIC KEY CLAVE_DE_PRUEBA DECRYPTION BY PASSWORD = 'MAMATEQUIEROMUCHO'
SET @CIFRADO = ENCRYPTBYKEY(KEY_GUID('CLAVE_DE_PRUEBA'), @ORIGINAL)
SELECT @ORIGINAL AS ORIGINAL, @CIFRADO AS CIFRADO
CLOSE SYMMETRIC KEY CLAVE_DE_PRUEBA


-- DESENCRIPTADO
OPEN SYMMETRIC KEY CLAVE_DE_PRUEBA DECRYPTION BY PASSWORD = 'MAMATEQUIEROMUCHO'
DECLARE @VALOR_RECUPERADO VARCHAR(50)
SET @VALOR_RECUPERADO = DECRYPTBYKEY(@CIFRADO)
SELECT @ORIGINAL, @VALOR_RECUPERADO
CLOSE SYMMETRIC KEY CLAVE_DE_PRUEBA



-- CREACION DE PROCEDIMIENTO ALMACENADO CIFRADO
ALTER PROCEDURE PA_INSERTAR_USUARIO
(
@NOMBRE VARCHAR(20),
@EMAIL VARCHAR(30),
@PASSWORD AS VARCHAR(20)
) WITH ENCRYPTION
AS
OPEN SYMMETRIC KEY CLAVE_DE_PRUEBA
DECRYPTION BY PASSWORD = 'MAMATEQUIEROMUCHO'
INSERT INTO USUARIOS
VALUES
(
@NOMBRE,
@EMAIL,
ENCRYPTBYKEY(KEY_GUID('CLAVE_DE_PRUEBA'), @PASSWORD)
)
CLOSE SYMMETRIC KEY CLAVE_DE_PRUEBA




-- CLAVES ASIMETRICAS
-- ------------------
CREATE ASYMMETRIC KEY CLAVE_DE_PRUEBA_A
WITH ALGORITHM = RSA_2048
ENCRYPTION BY PASSWORD = N'12345'


DECLARE @ORIGINAL AS VARCHAR(20)
DECLARE @CIFRADO AS VARBINARY(MAX)
DECLARE @RECUPERADO AS VARCHAR(20)


SET @ORIGINAL = 'A POR TODAS, HERMANOS'
-- NO SE NECESITA PASAR CLAVE PARA CIFRAR:
SET @CIFRADO = ENCRYPTBYASYMKEY(ASYMKEY_ID('CLAVE_DE_PRUEBA_A'), @ORIGINAL)
SET @RECUPERADO = DECRYPTBYASYMKEY(ASYMKEY_ID('CLAVE_DE_PRUEBA_A'), @CIFRADO, N'12345')


SELECT @ORIGINAL, @CIFRADO, @RECUPERADO



-- CERTIFICADOS
-- ------------
CREATE CERTIFICATE CERTIFICADO_DE_PRUEBA
ENCRYPTION BY PASSWORD = 'TORQUEMADA'
WITH SUBJECT = 'CERTIFICADO DE PRUEBA',
EXPIRY_DATE = '31/12/2010'


-- BACKUP:
BACKUP CERTIFICATE CERTIFICADO_DE_PRUEBA TO FILE='C:\BACKUP_CERTIFICADO_DE_PRUEBA.CER'


-- USO:
DECLARE @ORIGINAL AS VARCHAR(20)
DECLARE @CIFRADO AS VARBINARY(MAX)
DECLARE @RECUPERADO AS VARCHAR(20)


SET @ORIGINAL = 'A POR TODAS, HERMANOS'
-- NO SE NECESITA PASAR CLAVE PARA CIFRAR:
SET @CIFRADO = ENCRYPTBYCERT(CERT_ID('CERTIFICADO_DE_PRUEBA'), @ORIGINAL)
SET @RECUPERADO = DECRYPTBYCERT(CERT_ID('CERTIFICADO_DE_PRUEBA'), @CIFRADO, N'TORQUEMADA')


SELECT @ORIGINAL, @CIFRADO, @RECUPERADO