从 C# 到 SQL 的散列和转换为 Base64

Hashing and Converting To Base64 from C# to 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的编码让我很头疼

感谢任何帮助。

除非您可以将 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);
        }

输入"testing æøå"输出: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)')

输入"testing æøå"输出:Rp/BQKVFVjtWxNL9Oj8VGkiS769ekSVYhE9AzlKnvPw=