我正在尝试加密SQL Server中的密码,当我使用字符串而不是使用预准备语句参数时,我得到两个不同的结果。
例如:
SELECT
sys.fn_varbintohexstr(HASHBYTES('sha1', ?)),
sys.fn_varbintohexstr(HASHBYTES('sha1', 'password'))
哪里?由'密码'填充。它给了我
0xe8f97fba9104d1ea50479...
0x5baa61e4c9b93f3f06822...
为什么我得到两个不同的结果应该是同一个东西?
此外,这只发生在SQL Server中,如果我在MySQL中执行类似的查询,它会为两者返回相同的值。
我知道我应该使用更好的加密技术,但我现在仍然坚持使用sha1(无盐)。
由于
答案 0 :(得分:1)
一个是varchar,另一个是nvarchar
SELECT
sys.fn_varbintohexstr(HASHBYTES('sha1','password')),
sys.fn_varbintohexstr(HASHBYTES('sha1',N'password'))
返回
0x5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
0xe8f97fba9104d1ea5047948e6dfb67facd9f5b73