在 SQL Server 中对超过 8000 字节进行哈希处理

发布于 2024-12-10 05:54:45 字数 82 浏览 0 评论 0原文

SQL Server 的哈希函数 HASHBYTES 的输入限制为 8000 字节。

如何散列较大的字符串?

SQL Server's hashing function HASHBYTES has an input limit of 8000 bytes.

How do you hash larger strings?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

-黛色若梦 2024-12-17 05:54:45

您可以编写一个 SQL CLR 函数:

[Microsoft.SqlServer.Server.SqlFunction]
public static SqlBinary BigHashBytes(SqlString algorithm, SqlString data)
{
    var algo = HashAlgorithm.Create(algorithm.Value);

    var bytes = Encoding.UTF8.GetBytes(data.Value);

    return new SqlBinary(algo.ComputeHash(bytes));
}

然后可以像这样在 SQL 中调用它:

--these return the same value
select HASHBYTES('md5', 'test stuff')
select dbo.BigHashBytes('md5', 'test stuff')

仅当长度超过 8k 时才需要 BigHashBytes。

You could write a SQL CLR function:

[Microsoft.SqlServer.Server.SqlFunction]
public static SqlBinary BigHashBytes(SqlString algorithm, SqlString data)
{
    var algo = HashAlgorithm.Create(algorithm.Value);

    var bytes = Encoding.UTF8.GetBytes(data.Value);

    return new SqlBinary(algo.ComputeHash(bytes));
}

And then it can be called in SQL like this:

--these return the same value
select HASHBYTES('md5', 'test stuff')
select dbo.BigHashBytes('md5', 'test stuff')

The BigHashBytes is only necessary if the length would be over 8k.

吾家有女初长成 2024-12-17 05:54:45

您可以对输入的 8k(或 4k 或 2k)块进行哈希处理,然后连接这些哈希值或将它们哈希为新的哈希值。不过,如果您必须创建类似的算法(例如在外部 .NET 应用程序中)来比较在 SQL Server 外部创建的哈希值,这可能会变得很困难。

另一种选择:依靠 SQL Server 的 CLR 集成 并在 .NET 中执行哈希集会。

You could hash 8k (or 4k or 2k) chunks of the input and then either concatenate those hashes or hash them into a new hash value. This might get difficult though if you have to create a similar algorithm (in an external .NET app for example) to compare hashes created outside of SQL Server.

Another option: Lean on SQL Server's CLR integration and perform the hashing in a .NET assembly.

逐鹿 2024-12-17 05:54:45

与 Paul 的想法一样,对于分块,想到的一个想法是将散列字符串存储在 XML 列中,每个块作为单独的 XML 元素。

Like Paul's idea, one idea that comes to mind for chunking would be to store the hashed string in an XML column, with each chunk as a separate XML element.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文