【问题标题】:Conversion of hashbytes output to integer allowed?允许将哈希字节输出转换为整数?
【发布时间】:2016-06-03 23:53:49
【问题描述】:

我有一些包含以下几行的代码:

CAST(HASHBYTES('MD5', 'some long string with up to 256 characters') AS int)
CAST(HASHBYTES('SHA2_256', 'some very very long string...') AS int)

这样做是为了生成一个唯一的 int 值,然后将该 int 值用作查找键(或连接中的外键)。所以我对为什么这样做的最好猜测是使连接更快并且能够生成索引(并且不会遇到 900 字节的限制)。

但我不确定上述输出在转换为 int 时是否会产生更多的冲突。

我的理解是不可能将 MD5 哈希甚至 SHA-256 哈希表示为 int 值...

代码最初是在 SQL-Server 2008 上开发的。我目前使用的是 SQL-Server 2014。

【问题讨论】:

  • 所以你只需要一个唯一的 INT 值?你不能使用递增的身份吗?
  • 我需要基于字符串的 int 的唯一性。所以相同的字符串应该给出相同的 int 值。
  • “相同的字符串 -> 相同的 int”?那个怎么样?考虑到int 仍然是 4 个字节长。
  • 到目前为止它确实有效,因为字符串很短,我想这可能是基于内部转换为 int 的纯粹巧合。

标签: tsql sql-server-2012 sql-server-2014


【解决方案1】:

当然,它会产生更多的碰撞。 int 只有 4 个字节(32 位),而 MD5 生成 20(160 位)和 SHA2_256 32(256 位)。更少的位意味着更少的唯一值因此更多的冲突。

技术上它允许的......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 2019-10-27
    • 2019-05-23
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    相关资源
    最近更新 更多