A dica desta semana demonstra como podemos utilizar as funções não documentadas PWDENCRYPT e PWDCOMPARE para criptografar e validar senhas em uma tabela de usuários.
O exemplo abaixo demonstra como inserir uma senha criptograda na coluna “senha” de uma tabela de usuários
Exemplo:
— Cria a tabela tbusuarios com os campos nome e senha
CREATE TABLE tbusuarios (nome nvarchar(50),senha VARBINARY(255))
— Insere registro utilizando a função para criptografar a senha
INSERT INTO tbusuarios VALUES (‘Nilton Pinheiro’, CONVERT(VARBINARY(255), PWDENCRYPT(‘hwx123’)))
— Faz um SELECT na tabela tbusuarios
SELECT nome,senha FROM tbusuarios
Resultado:
nome senha
——————– ———————————————————————————————–
Nilton Pinheiro 0x01009966993A608634E7FB64CF53927CA958EF8DDF66CB3238FB6276FEC09C0B7EB914970ADD70872DF274A2B9B5
Percebam que no INSERT eu utilizo a função CONVERT para converter a senha criptografada para o data type VARBINARY, o qual corresponde ao campo da tabela.
Como o SQL Server não fornece uma função para descriptografar a senha, fica impossível alguém saber o que significa o resultado da senha acima. Com isto, vem a questão… como vamos fazer para validar a senha do usuário?
Embora o SQL Server não tenha uma função que permita descriptografar uma senha, ele tem uma função que permite COMPARAR senhas. Sendo assim, para validar a senha do usuário devemos utilizar a função PWDCOMPARE.
A seguir temos o codigo para validar a senha do usuario:
SELECT PWDCOMPARE(‘hwx123’,senha, 0) AS Senha_OK
FROM tbusuarios
WHERE nome = ‘Nilton Pinheiro’
Senha_OK
—————
1
Na query acima, o primeiro parâmetro da função PWDCOMPARE é a string (senha) que o usuario digitou na tela de Login de sua aplicação, o segundo parâmetro é a senha criptografada que esta armazenada na coluna “senha” da tabela tbusuarios e o último, a forma como você quer que o resultado seja apresentado: 1 quando a senha for igual e 0 quando a senha for diferente.
Nota: Compatível com SQL Server 2000 e SQL Server 2005.
O que você achou desta dica ? Deixe seu voto no bloco “Classificação de notícias”. Seu feedback é muito importante!

