加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么在sql server中生成MD5哈希不一样?

发布时间:2020-12-15 04:13:14 所属栏目:百科 来源:网络整理
导读:这个问题在这里已经有一个答案: TSQL md5 hash different to C# .NET md53个 我在SQL Server 2008 R2中有一个包含两个字段(WordHash,Word)的表.这个Hash字段在C#中生成,我需要在sql server中为Word字段重新生成哈希码. 但是我的问题是在sql server和C#中生
这个问题在这里已经有一个答案:> TSQL md5 hash different to C# .NET md53个
我在SQL Server 2008 R2中有一个包含两个字段(WordHash,Word)的表.这个Hash字段在C#中生成,我需要在sql server中为Word字段重新生成哈希码.

但是我的问题是在sql server和C#中生成的MD5哈希是不同的.我发现下面的代码来解决这个问题,但我仍然有同样的问题.

SQL代码:

CONVERT(NVARCHAR(32),HASHBYTES('MD5','some word'),2)

把这个代码块放到我的查询之后,我看到一些有线的结果!这是我的结果:

我的查询:

SELECT 
    [WordHash],convert(nvarchar(32),'Analytics'),2) AS TestHash,[Word]),2) AS SqlHash
FROM myTable

结果:

WordHash: A768CAA988605A2846599CF7E2D0C26A
TestHash: A768CAA988605A2846599CF7E2D0C26A
SqlHash F4AFA5FEF805F7F5163EC6402BAF61FF

请注意,“Google Analytics(分析)”是数据库中的记录数据之一.
为什么TestHash& SqlHash是不同的,而他们从相同的代码生成!

解决方法

问题是NVARCHAR和VARCHAR被哈希化为不同的值. HASHBYTES(‘MD5′,’Analytics’)和[WordHash]都是VARCHAR值的散列,而[Word]是一个NVARCHAR.
select HASHBYTES('MD5','varchar'
union
select HASHBYTES('MD5',N'Analytics'),'nvarchar'

--outputs
------------------------------------- --------
0xA768CAA988605A2846599CF7E2D0C26A    varchar
0xF4AFA5FEF805F7F5163EC6402BAF61FF    nvarchar

要解决这个问题,您必须将[Word]更改为VARCHAR或使用NVARCHAR值重新计算[WordHash].

一些有用的进一步阅读:Comparing SQL Server HASHBYTES function and .Net hashing

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读