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
ですか?
[編集]:
以下の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;
}