2010-01-12 54 views
1

我的用户表(SQL Server 2008)中的密码字段在插入时使用HASHBYTES加密。我有一个存储过程,其中包含用户名和明文密码的参数,SELECT使用该用户名和密码通过HASHBYTES发送,如果找到匹配则返回用户记录。 SP总是返回一个空的记录集,但是如果我只将SELECT从SP复制并粘贴到新的查询窗口,它将返回匹配的记录。 SP中没有其他声明。我在这里错过了一些东西;它是什么?已存储的程序中的哈希码比较不匹配记录

回答

2

如果SELECT本身起作用,但在程序内部不起作用,我首先要查找的是参数类型。哈希将在类似的输入,但不同类型的疯狂变化:

select hashbytes('MD5','Lorem Ipsum'), hashbytes('MD5',N'Lorem Ipsum') 
+0

谢谢。真正的问题是我试图查询我通过INSERT语句设置的记录,但我没有指定unicode。我更新了记录,现在它工作。 – 2010-01-12 19:13:24

+0

顺便说一句,当我想我应该使用“散列”时,我使用了“加密”一词。错误承认。 – 2010-01-12 19:14:40

+0

因为我们在NVARCHAR(MAX)类型的列中存储和MDF哈希,所以我们被烧了。该代码行是'byte [] inputBytes = System.Text.Encoding.ASCII.GetBytes(input)'。ASCII需要更改为UTF-8。 – Kuyenda 2011-12-05 23:32:55

0

从代码中调用它时如何传递参数?是否有嵌入的CR/LF或空白?

+0

也许,但我怀疑它。我已经通过使用命令参数的代码(ASP.NET C#)尝试了这一点,并使用SSMS中的执行存储过程功能。两者的结果相同。 – 2010-01-12 17:46:59