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'