Xaq*_*ron 2 t-sql hash nvarchar
我正在尝试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))
Run Code Online (Sandbox Code Playgroud)
但是当我用第一行代码替换时,它会计算错误的哈希值declare @input nvarchar(50).
Calculated hash (nvarchar): BBA91B680CE2685E9465DE24967E425CF055B10F
Calculated hash by a tool : 37AA63C77398D954473262E1A0057C1E632EDA77
Run Code Online (Sandbox Code Playgroud)
如何计算a的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;
}
Run Code Online (Sandbox Code Playgroud)
UTF16当您将它与SQL Server返回的那个进行比较时,您确定您的工具返回的哈希值是使用还是Unicode编码?... SHA1(和其他编码格式)取决于数据类型,因此它应该在给定时返回不同的值作为输入.请查看此链接以获取更详细的说明.