SHA1密码加密错误

时间:2012-11-20 18:17:04

标签: asp.net sql-server-2008 sha1

我正在尝试再次登录检查存储在数据库中的凭据,其中电子邮件是纯文本,密码保存为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

有谁知道为什么?

1 个答案:

答案 0 :(得分:3)

SELECT HASHBYTES()返回类型varbinary,您的密码列似乎是一个varchar。

为OP工作的解决方案:

SELECT COUNT(*) from users where email='test@gmail.com' and password=(master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', 'password'), 1, 0))