【问题标题】:Hashing and Converting To Base64 from C# to SQL从 C# 到 SQL 的散列和转换为 Base64
【发布时间】:2023-03-05 07:41:01
【问题描述】:

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

感谢您的帮助。

【问题讨论】:

  • 是的 - 编码为 UTF-8 会给您带来麻烦,因为 SQL Server 不支持 UTF-8 ...

标签: c# sql-server migration string-hashing


【解决方案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=

【讨论】:

  • 谢谢。这就是我最后所做的。
猜你喜欢
  • 2013-09-23
  • 2013-05-16
  • 1970-01-01
  • 2023-02-24
  • 2018-06-26
  • 1970-01-01
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多