首页 > 解决方案 > 散列对 SQL 中的相同输入给出不同的结果

问题描述

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

当我使用以下查询时

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

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

0x237103B50B9AA3496711E628FA073D6F

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

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

我明白了

0x75E7A2E4F2A571D10FB8B042E4586376

可能是什么原因?

标签: sqlencryptionhashmd5

解决方案


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

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

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

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

推荐阅读