这个问题在这里已经有一个答案:>
TSQL md5 hash different to C# .NET md53个
我在sql Server 2008 R2中有一个包含两个字段(WordHash,Word)的表.这个Hash字段在C#中生成,我需要在sql server中为Word字段重新生成哈希码.
我在sql Server 2008 R2中有一个包含两个字段(WordHash,Word)的表.这个Hash字段在C#中生成,我需要在sql server中为Word字段重新生成哈希码.
但是我的问题是在sql server和C#中生成的MD5哈希是不同的.我发现下面的代码来解决这个问题,但我仍然有同样的问题.
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
原文地址:https://www.jb51.cc/csharp/92415.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。