我正在尝试计算SHA1
使用 T-SQL 计算 unicode 字符串的哈希值。下面的代码可以很好地工作ASCII
字符串:
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
?
[EDIT]:
下面的 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;
}
您确定您的工具返回的哈希值正在使用UTF16
或 Unicode 编码,当你将它与 SQL Server 返回的编码进行比较时?...SHA1
(和其他编码格式)取决于数据类型,因此当作为输入给出时它应该返回不同的值。看一眼this http://weblogs.sqlteam.com/mladenp/archive/2009/04/28/Comparing-SQL-Server-HASHBYTES-function-and-.Net-hashing.aspx链接以获得更详细的解释。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)