【发布时间】:2012-11-20 18:17:03
【问题描述】:
我正在尝试对存储在数据库中的凭据执行登录检查,其中电子邮件是纯文本,密码保存为 SHA1。目前,用户是手动创建的。为了检查登录详细信息,我决定使用存储过程。 问题来了:
以下查询在 SHA1 中返回密码:
SELECT HASHBYTES('SHA1', 'password')
// returns 0x5BAA61E4C9B93F3F0682250B6CF8331B7EE68FD8
以下查询确认用户存在:
SELECT COUNT(*) from users where email='test@gmail.com'
and password='0x5BAA61E4C9B93F3F0682250B6CF8331B7EE68FD8' // returns 1
现在是存储过程(从整个过程中提取的 select 语句,其中 'password' 是一个占位符),它似乎没有返回 1:
SELECT COUNT(*) from users where email='test@gmail.com'
and password=(SELECT HASHBYTES('SHA1', 'password')) // returns 0
有人知道为什么吗?
【问题讨论】:
-
password的数据类型是什么?您是存储字符串还是 varbinary?为什么您的 varbinary 值用引号括起来(第二个查询)?
标签: asp.net sql-server-2008 sha1