Buscar en el Blog

lunes, 5 de diciembre de 2011

Encriptar un password con SQL Server

Saludos a todos los seguidores de este blog!.
Muchas veces necesitamos encriptar es password de nuestra aplicacione en la base de datos, es decir que el campo donde almacenamos el password(contraseña) no este como simple texto, si no que este valor no sea legible.

Para eso podemos usar lo siguiente:
Pwdencryp() y Pwdcompare() 
Estas son dos funciones de sql server, la primera sirve para encriptar y la segunda sirve para comparar el password con la cadena encriptada.

Por ejemplo si colocamos lo siguiente en el analizador de consultas:

select pwdencrypt('lexblas')

nos arrojara el siguiente valor

0x0100D101C65D0C4F2A6714337E7E9E7CCD88C9583C9428B2E9A2

El valor anterior es nuestro password encriptado.

Ahora para comparar nuestro password ingresado con el que tenemos en la base de datos, hacemos lo siguiente:

select pwdcompare ('lexblas',0x0100D101C65D0C4F2A6714337E7E9E7CCD88C9583C9428B2E9A2)

donde: El primer argumento es el password en texto, el cual estamos ingresando en nuestra ventana de inicio de sesion y el segundo parametro es el password encriptado.


El campo donde se almacenara el password debe ser del tipo varbinary.
Por ejemplo:


create table passwords
(
usuario varchar(15),
password varbinary(255)
)



Para validar el usuario, pueden crear un procedimiento almacenado que haga el trabajo.
Tambien hay otra alternativa.






create proceduresp_verificarUsuario @usuario varchar(15),@pass varchar(15),@r int output
as
if exists (select * from usuario where usuario=@usuario and 1 = pwdcompare(@pass,password))
set @r=1

else
set @r=0
Si el password concuerda con el que esta en la base de datos devolvera el valor de 1, de caso contrario cero.


SQL 2005 nos da otra posibilidad de realizar una encriptación de datos para campos de la base de datos. Tiene una función para ello: HashBytes.

A esta función, simplemente se le pasan como parámetros el algoritmo de encriptación (que pueden ser MD2, MD4, MD5, SHA, SHA1) y la cadena (o variable) a encriptar, devolviendo el valor encriptado para el algoritmo usado.

Un ejemplo:

DECLARE @myCrypVar varchar(max);
SELECT @myCrypVar = CONVERT(varchar,'cadena a encriptar');
SELECT HashBytes('SHA1', @myCrypVar);
 
Resultado: 0x548C29B27BC6750A11E0D97E9ED16D4B32DBE7FF

Esto tambien se puede implementar como el ejemplo anterior.

No hay comentarios:

Publicar un comentario