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