Hay veces que nos complicamos la vida de una forma complicada e intentamos volver a inventar la pólvora, la rueda y todo a la vez.
La encriptación de contraseñas es una de esas cosas que la complicamos. Podemos usar las funciones que tiene SQL Server 2008 y posterior.
Para este ejemplo, vamos a usar las funciones ENCRYPTBYPASSPHRASE y DECRYPTBYPASSPHRASE. Para ello vamos a necesitar una palabra clave que es la que vamos a usar como patrón. Veamos como se las gasta esta función.
SELECT ENCRYPTBYPASSPHRASE('KurroSoftware','MyPassword')
Esta función esta usando la palabra KurroSoftware para su algoritmo de encriptación. El resultado es el siguiente:
Esta claro, no?
Pues usando lo mismo pero en sentido contrario es como funciona la función DECRYPTBYPASSPHRASE, es decir, usa la palabra clave y el valor binario:
DECLARE @Var AS VARBINARY(8000)
SET @Var = 0x01000000B8C73A18B8157E470A120864E04D58B8BB12C1E38B2C3BF36A5768883925821C64120CC0E5309A39
SELECT CAST(DECRYPTBYPASSPHRASE('KurroSoftware',@Var) AS VARCHAR(MAX))
Esto nos devuelve, la clave desencriptada.
Pues ahora a jugar con estas funciones. Yo propongo las siguientes funciones de usuario.
CREATE FUNCTION [dbo].[fn_DecryptPassword(@Password AS VARBINARY(8000))]
RETURNS NVARCHAR(100)
AS
BEGIN
DECLARE @Decrypted VARCHAR(100)
SET @Decrypted = DECRYPTBYPASSPHRASE('KurroSoftware',@Password)
RETURN @Decrypted
END
Si quieres mas información sobre estas dos funciones, usa los siguientes enlaces:
ENCRYPTBYPASSPHRASE - http://technet.microsoft.com/en-us/library/ms190357.aspx
DECRYPTBYPASSPHRASE - http://technet.microsoft.com/en-us/library/ms188910.aspx
La encriptación de contraseñas es una de esas cosas que la complicamos. Podemos usar las funciones que tiene SQL Server 2008 y posterior.
Para este ejemplo, vamos a usar las funciones ENCRYPTBYPASSPHRASE y DECRYPTBYPASSPHRASE. Para ello vamos a necesitar una palabra clave que es la que vamos a usar como patrón. Veamos como se las gasta esta función.
SELECT ENCRYPTBYPASSPHRASE('KurroSoftware','MyPassword')
Esta función esta usando la palabra KurroSoftware para su algoritmo de encriptación. El resultado es el siguiente:
0x01000000B8C73A18B8157E470A120864E04D58B8BB12C1E38B2C3BF36A5768883925821C64120CC0E5309A39
Esta claro, no?
Pues usando lo mismo pero en sentido contrario es como funciona la función DECRYPTBYPASSPHRASE, es decir, usa la palabra clave y el valor binario:
DECLARE @Var AS VARBINARY(8000)
SET @Var = 0x01000000B8C73A18B8157E470A120864E04D58B8BB12C1E38B2C3BF36A5768883925821C64120CC0E5309A39
SELECT CAST(DECRYPTBYPASSPHRASE('KurroSoftware',@Var) AS VARCHAR(MAX))
Esto nos devuelve, la clave desencriptada.
MyPassword
Pues ahora a jugar con estas funciones. Yo propongo las siguientes funciones de usuario.
CREATE FUNCTION [dbo].[fn_EncryptPassword(@Password AS VARCHAR(100))]
RETURNS VARBINARY(8000)
AS
BEGIN
DECLARE @Encrypted AS VARBINARY(8000)
SET @Encrypted = ENCRYPTBYPASSPHRASE('KurroSoftware',@Password)
RETURN @Encrypted
END
RETURNS VARBINARY(8000)
AS
BEGIN
DECLARE @Encrypted AS VARBINARY(8000)
SET @Encrypted = ENCRYPTBYPASSPHRASE('KurroSoftware',@Password)
RETURN @Encrypted
END
RETURNS NVARCHAR(100)
AS
BEGIN
DECLARE @Decrypted VARCHAR(100)
SET @Decrypted = DECRYPTBYPASSPHRASE('KurroSoftware',@Password)
RETURN @Decrypted
END
Si quieres mas información sobre estas dos funciones, usa los siguientes enlaces:
ENCRYPTBYPASSPHRASE - http://technet.microsoft.com/en-us/library/ms190357.aspx
DECRYPTBYPASSPHRASE - http://technet.microsoft.com/en-us/library/ms188910.aspx
A muy Bueno eh!
ResponderEliminar!me sirvio de MUcho Gracias !!
Hice el ejercicio y me salió 慐獳潷摲 en el decripted
ResponderEliminarComprueba lo siguiente:
EliminarEstas en la base de datos MASTER (ejecuta USE MASTER para estar seguro)
El contenido de la variable @Var NO HA DE ESTAR ENTECOMILLADO, es un valor binario, no varchar.
hola, tengo un archivo inscriptado, tu me podrias ayudar?
EliminarA mi también 摡業潲瑯, o parecido :v
ResponderEliminarAcabo de probarlo usando MS SQL Server 2008 R2 y la respuesta ha sido correcta.
EliminarComprueba lo siguiente:
Estas en la base de datos MASTER (ejecuta USE MASTER para estar seguro)
El contenido de la variable @Var NO HA DE ESTAR ENTECOMILLADO, es un valor binario, no varchar.
Si sigue dando problemas, comentamos mas detalles.
Hola. Este ejemplo me funciona bien, pero cuando cambio el texto me sale lo mismo que a los demas "慍牵䕯敺畱敩l". Estoy usando Sql 2012 Express. Alguna solucion? Sigue funcionando igual en versiones mayores a 2008 R2? Gracias. Saludos
ResponderEliminaren vez de poner NVARCHAR(MAX) se debe poner VARCHAR(MAX) y se arregla
EliminarGracias por la observación. Ya he corregido la entrada.
Eliminarque tal, no puedo desencriptar un campo en sql, dicho campo no esta en varbinary,me pueden aydar???
ResponderEliminarhola, estoy tratando de desencriptar por ejemplo este valor: 0x98042C22B4C190B41916A9278C3CB6740AFFF2BA98DB7D0016C8D7E87FA1318C
ResponderEliminary no tengo resultados, lo estoy haciendo de la siguiente forma:
DECLARE @Var AS VARBINARY(8000)
SET @Var = 0x98042C22B4C190B41916A9278C3CB6740AFFF2BA98DB7D0016C8D7E87FA1318C
SELECT CAST(DECRYPTBYPASSPHRASE('TEst',@Var) AS VARCHAR(MAX))
buenas este proceso se puede hacer en Sql server 2014
ResponderEliminarEste comentario ha sido eliminado por el autor.
Eliminarbuenas este proceso se puede hacer en Sql server 2014
ResponderEliminarme ayudan estoy usando sql dumper (credit_card_num,char (32)),0x217e21) esta es la inscriptacion ayuda
ResponderEliminar