SQL 中的相同输入,散列给出不同的结果

Hashing Gives Different Results for the Same Input in SQL

我是加密新手。我搜索了很多但找不到答案。

当我使用下面的查询时

SELECT  UserName, HASHBYTES('MD5', 'trial1') [HashedPasswd] from accounts

我得到以下结果作为加密。

0x237103B50B9AA3496711E628FA073D6F

但是,当我使用下面的查询时,密码列的值正好是 trial1

SELECT  UserName, HASHBYTES('MD5', Password) [HashedPasswd] from accounts

我明白了

0x75E7A2E4F2A571D10FB8B042E4586376

可能是什么原因?

那是因为“密码”是一个 unicode 列(可能是 NVARCHAR)而 'trial1' 不是一个 unicode 字符串。

您可以通过在字符串前面添加“N”来告诉 SQL 服务器 'trial1' 是一个 unicode 字符串。

如果您 运行 此查询,您将获得与“密码”列相同的哈希值。

SELECT  UserName, HASHBYTES('MD5', N'trial1') [HashedPasswd] from accounts