Хеширование и преобразование в Base64 из C# в SQL
Я пытаюсь переписать следующий метод C# для кода SQL Server 2014. Пока что безрезультатно.
public static string GetHash(string input)
{
HashAlgorithm hashAlgorithm = new SHA256CryptoServiceProvider();
byte[] byteValue = System.Text.Encoding.UTF8.GetBytes(input);
byte[] byteHash = hashAlgorithm.ComputeHash(byteValue);
return Convert.ToBase64String(byteHash);
}
Особенно мне мешает кодировка в UTF8.
Я ценю любую помощь.
1 ответ
Решение
Вы не сможете это сделать, если только вы не сможете изменить кодировку вашего метода GetHash на Unicode.
Если вы можете сделать это, должно работать следующее
public static string GetHash(string input)
{
HashAlgorithm hashAlgorithm = new SHA256CryptoServiceProvider();
byte[] byteValue = System.Text.Encoding.Unicode.GetBytes(input);
byte[] byteHash = hashAlgorithm.ComputeHash(byteValue);
return Convert.ToBase64String(byteHash);
}
Вход "тестирование" выход: Rp/BQKVFVjtWxNL9Oj8VGkiS769ekSVYhE9AzlKnvPw=
DECLARE @Bin VARBINARY(MAX);
set @bin = (select HASHBYTES('SHA2_256',N'testing æøå'))
select CAST(N'' AS XML).value('xs:base64Binary(xs:hexBinary(sql:variable("@bin")))','VARCHAR(MAX)')
Вход "тестирование" выход: Rp/BQKVFVjtWxNL9Oj8VGkiS769ekSVYhE9AzlKnvPw=