0

我尝试将以下 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的编码给我带来了麻烦。

我很感激任何帮助。

4

1 回答 1

0

除非您可以将 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=

于 2016-04-15T12:55:04.840 回答