Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么sql server中生成的MD5哈希不相等?_C#_Sql Server_Hash_Md5 - Fatal编程技术网

C# 为什么sql server中生成的MD5哈希不相等?

C# 为什么sql server中生成的MD5哈希不相等?,c#,sql-server,hash,md5,C#,Sql Server,Hash,Md5,我在SQLServer2008R2中有一个表,其中包含两个字段(WordHash,Word)。这个Hash字段是在C#中生成的,我需要为sql server中的Word字段重新生成Hash代码 但我的问题是,sql server和C#中生成的MD5哈希是不同的。我发现下面的代码可以解决这个问题,但我仍然有同样的问题 SQL代码: CONVERT(NVARCHAR(32),HASHBYTES('MD5', 'some word'), 2) 在将这个代码块放入我的查询之后,我看到了一些有线结果!这

我在SQLServer2008R2中有一个表,其中包含两个字段(WordHash,Word)。这个
Hash
字段是在C#中生成的,我需要为sql server中的
Word
字段重新生成Hash代码

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

SQL代码:

CONVERT(NVARCHAR(32),HASHBYTES('MD5', 'some word'), 2)
在将这个代码块放入我的查询之后,我看到了一些有线结果!这是我的结果:
我的问题是:

SELECT 
    [WordHash],
    convert(nvarchar(32),HASHBYTES('MD5', 'Analytics'),2) AS TestHash,
    convert(nvarchar(32),HASHBYTES('MD5', [Word]),2) AS SqlHash
FROM myTable
结果:

WordHash: A768CAA988605A2846599CF7E2D0C26A
TestHash: A768CAA988605A2846599CF7E2D0C26A
SqlHash F4AFA5FEF805F7F5163EC6402BAF61FF
请注意,
'Analytics'
是数据库中的记录数据之一。

为什么
TestHash
SqlHash
是不同的,而它们是从相同的代码生成的

问题是将
NVARCHAR
VARCHAR
散列为不同的值。
HASHBYTES('MD5','Analytics')、
[WordHash]
都是
VARCHAR
值的散列,但
[Word]
NVARCHAR

select HASHBYTES('MD5',  'Analytics'), 'varchar'
union
select HASHBYTES('MD5', N'Analytics'), 'nvarchar'

--outputs
------------------------------------- --------
0xA768CAA988605A2846599CF7E2D0C26A    varchar
0xF4AFA5FEF805F7F5163EC6402BAF61FF    nvarchar
要解决此问题,您必须将
[Word]
更改为
VARCHAR
或使用
NVARCHAR
值重新计算
[WordHash]


一些有用的进一步阅读:

如果你做了
N'Some word'
而不是仅仅做
'Some word'
,结果会变得一样吗?这只是一个猜测,但我怀疑
'Analytics'
文字和
[word]
值是用不同的编码处理的,这可能会对散列输出产生影响。一个可能是unicode,而另一个不是。@ScottChamberlain你说得绝对正确:)。你能发布一些链接来理解为什么会发生这种情况吗?@ScottChamberlain-这个问题比你标记为重复的另一个问题更早被问到。我想另一个问题应该标记为重复,而不是这个问题。@Abhishekkumar这不是这个网站的工作原理,它不是“最老的赢了”,而是“最好的赢了”。我发现了另一个问题,我记得在这里回答了同一个问题,我把它标记为重复的,以便未来的访问者能够找到更好、更新的问题和答案。见“元讨论”,讨论结果是:不,你应该关闭旧的。它成功了。感谢Scott:-)将查询代码更改为:
convert(nvarchar(32),HASHBYTES('MD5',convert(varchar(32),[Word]),2)作为MyHash,它可以工作了。您拯救了我们的一天。