2
我正在尝试使用T-SQL来计算SHA1
unicode字符串的哈希值。下面的代码工作正常ASCII
字符串:使用T-SQL计算'nvarchar'字符串的SHA1哈希值
declare @input varchar(50)
set @input = 'some text'
print 'SHA1 Hash: ' + UPPER(master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0))
但它计算错误的哈希,当我更换的第一行代码与declare @input nvarchar(50)
。
Calculated hash (nvarchar): BBA91B680CE2685E9465DE24967E425CF055B10F
Calculated hash by a tool : 37AA63C77398D954473262E1A0057C1E632EDA77
如何计算SHA1
哈希nvarchar
的?
[编辑]:
下面的C#代码生成相同的哈希的工具,我使用的哈希:
// Computes SHA1 hash of a given string
string ComputeHash(string input)
{
string result = string.Empty;
byte[] hash;
byte[] bytes = Encoding.GetBytes(input);
using (var sha = SHA1Managed.Create())
hash = sha.ComputeHash(bytes);
foreach (var b in hash)
result += b.ToString("X2");
return result;
}
请参阅编辑请 – Xaqron 2011-03-17 21:09:13
谢谢,有用的链接。正如文章所描述的那样,这是一个带有'HashBytes'的已知错误。现在我可以理解为什么微软不擅长采用国际标准;当同一公司的两个团队根据输入**数据类型**计算散列值(SQL vs .NET)时,它们会有所不同。 – Xaqron 2011-03-17 21:56:17
@Xaqron:是的,正是.....很高兴链接帮助你。 – Lamak 2011-03-17 22:19:21