我有一列 varbinary(max) 类型的列,并使用了随机生成的 nvarchar(60) 类型的盐。我将盐保存在数据库中并使用哈希字节(密码+盐)保存了密码。
现在我想比较用户密码并对他进行身份验证。
我尝试获取他的密码并运行此查询——
SELECT [email] from admin where
[password]=HashBytes('SHA1','xxxxxx' +'/KsDnXdU+_a<t19wYCnEi/lxmXmAutR3DVA$#]~dSBskRMB?sb#41+=MFRpE')
它没有给我回电子邮件。我直接在sql server management studio上运行。但它给了我空白。为什么会这样?
当我通过电子邮件选择我正在获得角色时,这意味着电子邮件已注册。我的盐或查询有问题吗?
我修好了它。实际上直接添加盐给我带来了一个错误,尽管它是直接添加的并且计算了哈希并且没有从 sql server 返回错误。
当我运行此查询时
Select role from admin where salt='/KsDnXdU+_a<t19wYCnEi/lxmXmAutR3DVA$#]~dSBskRMB?sb#41+=MFRpE'
我没有结果。我意识到,这是一些转换问题。我当时用Convert(nvarchar(60),'%?r>%Vb+$hUZO8}=38/_J[@q@1mf^rz!V&q~\dLH5nQ&/edR\c[6ya|q$e%r')
并将我的查询作为
SELECT [email] from admin where
[password]=HashBytes('SHA1', 'xxxxxx'+Convert(nvarchar(60),'%?r>%Vb+$hUZO8}=38/_J[@q@1mf^rz!V&q~\dLH5nQ&/edR\c[6ya|q$e%r'))
这给我回了电子邮件。我真的不确定为什么会发生这种情况,但是使用 sqlserver 2005 和上面的查询我修复了它。我请求版主,如果它是 sql server 2005 中的任何错误,请让其他人知道。