如何通过在SQL Server中使用HashBytes函数返回具有限制大小的哈希结果



HASHBYTES函数可以返回大小有限的结果(例如20个字符),并确保没有碰撞的哈希结果?

SQL Server,Azure SQL数据库,Azure SQL数据仓库,并行数据仓库

的语法
HASHBYTES ( '<algorithm>', { @input | 'input' } )  
    <algorithm>::= MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512 
SELECT HASHBYTES('SHA1', 'This is a test.');

它返回

0x0E7AAB0B4FF0FD2DFB4F0233E2EE7A26CD08F173

长度太长。我不确定像0x0E7AAB0B4FF0FD2DFB这样的前20个字符是否会与另一个输入发生碰撞。实际上,我想通过在SQL Server中使用HASHBYTES函数来转换输入。

实际上,我想通过在SQL Server中使用HashBytes函数来转换输入

如果您选择前20个字符或某些随机字符

,您的输出可能不是唯一的

可以返回大小有限的结果(例如20个字符),并确保没有碰撞的哈希结果?

我们不控制输出的长度

有可能发生冲突,当您的输入超过8000个字符时。/p>

Google能够实现不同输入的碰撞,但是在计算能力下需要这

这种攻击需要超过9,223,372,036,854,775,808 SHA1计算。这使等效处理能力是6,500年的单CPU计算和110年的单GPU计算

因此,您不必担心碰撞。

更新:
就像仅供参考:

输入长度限制已从SQLServer 2016 SP1

中删除

参考:
https://dba.stackexchange.com/questions/35219/choosing-the-right-algorithm-in-hashbytes-function
https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html

最新更新