Ir al contenido principal

[SQL] - Encriptar y desencriptar contraseñas

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:

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

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

Comentarios

  1. A muy Bueno eh!
    !me sirvio de MUcho Gracias !!

    ResponderEliminar
  2. Hice el ejercicio y me salió 慐獳潷摲㄰ en el decripted

    ResponderEliminar
    Respuestas
    1. Comprueba 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.

      Eliminar
    2. hola, tengo un archivo inscriptado, tu me podrias ayudar?

      Eliminar
  3. A mi también 摡業⹮潲瑯, o parecido :v

    ResponderEliminar
    Respuestas
    1. Acabo de probarlo usando MS SQL Server 2008 R2 y la respuesta ha sido correcta.
      Comprueba 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.

      Eliminar
  4. 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

    ResponderEliminar
    Respuestas
    1. en vez de poner NVARCHAR(MAX) se debe poner VARCHAR(MAX) y se arregla

      Eliminar
    2. Gracias por la observación. Ya he corregido la entrada.

      Eliminar
  5. que tal, no puedo desencriptar un campo en sql, dicho campo no esta en varbinary,me pueden aydar???

    ResponderEliminar
  6. hola, estoy tratando de desencriptar por ejemplo este valor: 0x98042C22B4C190B41916A9278C3CB6740AFFF2BA98DB7D0016C8D7E87FA1318C

    y 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))

    ResponderEliminar
  7. buenas este proceso se puede hacer en Sql server 2014

    ResponderEliminar
  8. buenas este proceso se puede hacer en Sql server 2014

    ResponderEliminar
  9. me ayudan estoy usando sql dumper (credit_card_num,char (32)),0x217e21) esta es la inscriptacion ayuda

    ResponderEliminar

Publicar un comentario

Si quieres comentar, criticar, aportar mas informacion o simplemente felicitar, inserta tu comentario a continuacion. Entre todos podemos hacer cosas grandes.