viernes, 3 de agosto de 2007

Encriptar clave en SQL Server 2005

Buscando el google encontre varias opciones para encriptar un campo, pero el que me resulto mas facil y comodo de usar fue la funcion pwdencryp(campo), devuelve una cadena encryptada.

Lo que deseaba hacer era encriptar todas las claves de la tabla de usuarios de un sistema que trabajo habitualmente, aqui doy los pasos para lograr tal objetivo:

1. Lo primero es cambiarle el tipo de dato al campo de la clave de varchar(longitud) a varbinary(256), pero antes de esto, tenemos que guardar nuestras claves viejas sin encriptar en un campo temporal para no perder la informacion de la claves de los usuarios.

Cree un campo tiempo llamado "temp", luego pasamos las claves sin encriptar a dicho campo:

alter table usuarios add temp varchar(20)
go
update usuarios set temp = clave
go

2. Cambiar el tipo de dato al campo clave

alter table usuarios alter column clave varbinary(256)

3. Pasando las claves encriptadas a nuestro campo y eliminando el campo temporal

update usuarios set clave = pwdencryp(temp)
go
alter table usuarios drop column temp
go

4. Validando nuestro usuario por medio de una consulta

select * from usuarios where login = @login and pwdcompare(@clave, clave, 0) = 1

si no devuelve ningun registro es porque el usuario o la clave son incorrectas.


1 comentario:

Unknown dijo...

disculpa pero esto no me sale ni por descreto.. sera que estoy fallando en algo....... saludo

GO
create procedure usuario2
(
@Email nvarchar(50),
@pwd varchar(256)
--@error int = 0 output
)
As
BEGIN
SELECT Email,Passwords FROM Registro WHERE Email=@Email AND pwdcompare(@pwd,Passwords,0)=1

END
GO

y asi paso los datos
Convert(varbinary(256),pwdencrypt('@Passwords'))