从独立于 SQL Server 版本的 HASHBYTES('SHA1', text) 获取短哈希值?

问题描述

为了获取较长文本的内容派生密钥,我确实计算了 HASHBYTES('SHA1',text)。它返回 20 个字节长的 varbinary。由于我知道结果的长度,因此我将其存储为 binary(20)

为了使它更短(用作键),我想遵循 short hash 的 Git 想法——就好像十六进制表示的第一个(或最后一个)字符.我想从 binary(5)获取 binary(20) 值而不是字符。

尝试使用 sql Server 2016 时,似乎有以下简单方法

DECLARE @hash binary(20) = HASHBYTES('SHA1',N'příšerně žluťoučký kůň úpěl ďábelské ódy')
DECLARE @short binary(5) = @hash

SELECT @hash,@short

返回前导字节(高位字节):

(No column name)                            (No column name)
0xE02C3C55FBA0DF13ADA1B626B1E31746D57B4602  0xE02C3C55FB

但是,文档 (https://docs.microsoft.com/en-us/sql/t-sql/data-types/binary-and-varbinary-transact-sql?view=sql-server-ver15) 警告说:

不能保证任何数据类型和二进制数据类型之间的转换在 sql Server 版本之间是相同的。

嗯,这不完全是转换。尽管如此,这种不确定性是否也适用于从较长版本的 binary 获得较短版本的 binary?对于 sql Server 的未来版本,我应该期待什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)