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.

Entradas populares de este blog

[VB] - Generar GUID

Esta si es buena... Como se nota que VB es un lenguaje con "solera", es decir, con años pero con robustez. Pero le pasa como al abuelo Cebolleta, tiene experiencia pero para los nuevos tiempos... ains.. le falta algo. Hoy en dia no sabriamos hacer nada sin un buen GUID, sobre todo si lo que queremos es identificar de forma unica y constante algun registro, objeto u otro componente. Usando SQL podemos generar un GUID en un santiamen a traves de la instrucción NEWID() , podemos crear un nuevo GUID en .NET usando la clase GUID.. pero... como lo hacemos con Visual Basic 6? Para empezar, vamos a ver en que se compone un GUID ¿Que es un GUID? Su significado es Globally Unique Identifier, osea Identificador globalmente único. Y su misión es la de proporcionar un identificador, de forma que es practicamente imposible que existan dos iguales en el mundo. Se compone de una palabra de 4 bytes, 3 palabras de 2 bytes y una de 6 bytes. Originalmente fue una idea de Microsoft pa

[.NET] Convertir Latitud y Longitud en Grados - Minutos y segundos

Hola a todos. Esta es una función para convertir un número de posición geográfica en grados, minutos y segundos. Como algunos pocos recordarán,una posición geográfica esta definida por latitud (Norte / Sur) y longitud (Este / Oeste) teniendo como referencia para la longitud el meridiano de Greenwich (Meridiano 0) y para la latitud la linea del Ecuador (Paralelo 0). Por lo que siempre hablaremos de posición " Grados Norte ", o " Grados Este ". Ahora es cuando entra en juego las matemáticas y la trigonometría (he de admitir que me encantan :D ). El hemisferio norte o sur solo tendría 90° Norte o Sur. Por ejemplo, El polo norte está a 90° 0' 0'' N de latitud. La longitud podríamos considerar el 0° 0' 0'' (estamos en el polo norte, por lo que es un solo punto, no hay longitud). En cambio, si nos movemos alrededor de la tierra por la linea de Ecuador, la latitud será 0° 0' 0'' (ni al norte, ni al sur) pero de Este a Oeste nos m