预准备语句中的SQL Server sha1值提供的值与硬编码字符串不同

时间:2013-05-30 21:35:55

标签: sql-server prepared-statement sha1

我正在尝试加密SQL Server中的密码,当我使用字符串而不是使用预准备语句参数时,我得到两个不同的结果。

例如:

SELECT 
    sys.fn_varbintohexstr(HASHBYTES('sha1', ?)),
    sys.fn_varbintohexstr(HASHBYTES('sha1', 'password'))

哪里?由'密码'填充。它给了我

0xe8f97fba9104d1ea50479...
0x5baa61e4c9b93f3f06822...

为什么我得到两个不同的结果应该是同一个东西?

此外,这只发生在SQL Server中,如果我在MySQL中执行类似的查询,它会为两者返回相同的值。

我知道我应该使用更好的加密技术,但我现在仍然坚持使用sha1(无盐)。

由于

1 个答案:

答案 0 :(得分:1)

一个是varchar,另一个是nvarchar

SELECT 
 sys.fn_varbintohexstr(HASHBYTES('sha1','password')),
 sys.fn_varbintohexstr(HASHBYTES('sha1',N'password'))

返回

0x5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
0xe8f97fba9104d1ea5047948e6dfb67facd9f5b73