viernes, 19 de octubre de 2012

SQL Server - Función para Encriptar y Desencriptar Contraseñas

Estas funciones que le mostraré a continuación permiten registrar un contraseña o dato en una tabla Sql de manera encriptada, y otra que facilite al usuario desencriptarla. Para encriptar un dato y registrarlo en la tabla, el campo debe ser de tipo varbinary:


Funcíón para encriptar contraseña:

CREATE FUNCTION [Navegacion].fun_usu_EncriptarContrasenia(@clave VARCHAR(50))
RETURNS VarBinary(8000)
AS
BEGIN
    DECLARE @pass AS VarBinary(8000)
    ------------------------------------
    ------------------------------------
    SET @pass = ENCRYPTBYPASSPHRASE('Encript0110',@clave)-- Encript0110 es la llave para cifrar el campo.
    ------------------------------------
    ------------------------------------
    RETURN @pass
END

Ejemplo: 
INSERT INTO [Navegacion].[nav_usuario] ([id_perfil], [nombre], [contrasenia], [activo], [id_personal])
 VALUES (1, 'ismael',  [Navegacion].fun_usu_EncriptarContrasenia('Ismael10'), 'True', 5);
Resultado: 


Funcíón para desencriptar contraseña:

CREATE FUNCTION [Navegacion].func_usu_DesencriptarContrasenia(@clave VARBINARY(8000))
RETURNS VARCHAR(50)
AS
BEGIN
    DECLARE @pass AS VARCHAR(25)
    ------------------------------------
     --Se descifra el campo aplicandole la misma llave con la que se cifro Encript0110
    SET @pass = DECRYPTBYPASSPHRASE('Encript0110',@clave)
    ------------------------------------
    ------------------------------------
    RETURN @pass
END



Ejemplo: 
 SELECT navUsu.id_perfil, navUsu.nombre,
 Navegacion.func_usu_DesencriptarContrasenia(navUsu.contrasenia) as contrasenia
 FROM Navegacion.nav_usuario as navUsu 
 where navUsu.nombre = 'ismael'

Resultado: 



9 comentarios:

  1. Excelente publicación. Ejemplo fácil de discernir. Muchas gracias!

    ResponderEliminar
  2. Hola necesito su ayuda, quiero usar este tipo de encriptacion pero para login desde mi pagina web, como hago la funcion o precedimiento; y como invocarlo al momento de validar mi login

    ResponderEliminar
    Respuestas
    1. hola escribeme al +584242619596

      Eliminar
    2. o tambien a glemir.cambero@gmail.com
      tomando el mismo ejemplo de nuestro amigo debes hacer el select del login algo como

      SELECT navUsu.id_perfil, navUsu.nombre,
      Navegacion.func_usu_DesencriptarContrasenia(navUsu.contrasenia) as contrasenia
      FROM Navegacion.nav_usuario as navUsu
      where navUsu.nombre = 'ismael'
      and Navegacion.func_usu_DesencriptarContrasenia(navUsu.contrasenia)='ismael10'

      es decir deber usar la funcion dentro del select de tu login, tal cual hicieras una consulta desde la base de datos directo,


      Eliminar
  3. Excelente amigo, muchas gracias por el aporte, que genial encontrar sitios donde ofrecen soluciones fáciles de entender

    ResponderEliminar
  4. Hola excelente aporte gracias, me gustaría poder Desencriptar unas claves que ya tengo guardadas en mi base de datos. Trate de usar la función pero me aparece el valor NULL en las contraseñas :( que puedo hacer para poder recuperar esas claves?
    Una cosa no me queda claro del ejemplo , que es : -- Encript0110 es la llave para cifrar el campo.

    ResponderEliminar
  5. Si lo desean hacer desde vb.net este video me funcionó bastante bien: https://www.youtube.com/watch?v=CpSGtkZNvn0

    ResponderEliminar