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