找到带有哈希和随机盐的正确密码

时间:2012-12-04 11:40:31

标签: sql-server hash salt password-encryption

我有一个包含用户的数据库,我想为每个用户提供一个随机盐,保存在Salt列中,并在字段密码中使用salt +密码的哈希值。

我可以像这样插入它们:

INSERT INTO users([Username], [Password], [Salt])
VALUES('David', HASHBYTES('SHA1', 'randomgeneratedsalt' + 'theirpw'), 'randomgeneratedsalt')

但我如何选择它们?

我自己的尝试是:

select * 
from users 
where Username = 'David' 
  AND Password = HASHBYTES('SHA1', Salt + 'enteredpw')

当然,我可以为尝试登录的用户选择salt,但我不想这样做。

1 个答案:

答案 0 :(得分:3)

您可以通过用户名选择它们,用户名必须是唯一的。找到用户后,您可以将显示的密码哈希与存储的密码进行比较。无论是否找不到用户名或散列不匹配,都需要小心显示相同的错误(即,防止信息泄露用户名有效)。