Sidebar

Podemos hacer uso de dos funciones de SQL Server para encryptar los passwords de nuestras aplicaciones.

Pwdencryp() y Pwdcompare()

Por ejemplo si quieres encriptar la palabra Omar sería de la siguiente manera:

select pwdencrypt('Omar')

Esto te va a regresar

0x0100ED2B271183192B4BE8691BBC4C44A10EC9B1AE27BCA6174F481E9 51D504A1C20FCB1040E168E84D7C7B8E69D

Y cada vez que lo ejecutes te va a traer un valor diferente, esto es para que sea dificil de desencriptar por alguien, de echo no existe alguna rutina que lo desencripte.
Ahora usando Pwdcompare() puedes saber si la encriptacion que vas a comparar pertenece al string

Por ejemplo, pones el nombre y posteriormente la palabra encriptada si te regresa un 1 quiere decir que si es correcto y si regresa un 0 que no lol es.

select pwdcompare ('omar',0x0100ED2B271183192B4BE8691BBC4C44A10EC9B1AE27BCA6174F4 81E951D504A1C20FCB1040E168E84D7C7B8E69D)

Ahora lo puedes usar asi:

Creas una tabla de usuarios

create table passwords
(
login varchar(10),
pwd varbinary(255)
)

Le insertas datos

insert into passwords values('Omar',convert(varbinary(255), pwdencrypt ('omarpassword')))
insert into passwords values('Marco',convert(varbinary(255), pwdencrypt ('marcopassword')))

La tabla quedaria de la siguiente manera

select * from passwords

login

pwd

Omar

0x0100DA3C87346DDD5A3653A9EE5112F4BFFC36DA7BDACF54FC05CEDAA18861 58614A7ED475F1DDDC10DDDC892EDE

Marco

0x0100023D5C2C6A34B2E855483FCF1F74FF82736EE3920180064BCF46153AB8BF 46CB942993AEF788DCB8B323E117

Ahora creas un procedure que revise los passwords

create procedure checkpass
(
@uid varchar(255),
@pwd varchar(255),
@error int = 0 output
)
As

if exists (select * from passwords where login=@uid and 1 = pwdcompare(@pwd,pwd,0))
select @error = 1
else
select @error = 0

print @error

Y de esta manera revisas el password con el parametro de entrada el usuario y el password, si te regresa un valor de 1 es correcto y si regresa un valor de 0 no es correcto

exec checkpass 'omar','Omarpassword'


Search

Tips BD