0

好的,这是用例。我有很多有点长(200-500 个字符)的字符串,我希望有一个较小的确定性哈希值。由于我可以将完整的 160 位 SHA1 值存储在 20 个字节中,因此每个字符串的空间改进了一个数量级。

但当然,即使使用具有良好雪崩效应的加密哈希,也必须担心字符串上的哈希冲突。我知道机会很小,但我想更保守一些。如果我做这样的事情:

哈希(输入)= CONCAT(HF1(输入),HF2(输入))

其中HF1是一些合适的鲁棒散列 f() 并且HF2是另一个不同但鲁棒的散列 f()。这是否有效地使发生冲突的机会几乎不可能(现在以 40 个字节而不是 20 个字节为代价)?注意:我不关心 SHA-1 对我的用例的安全/加密影响。

澄清:最初的问题是关于对连接的哈希值进行哈希处理,而不是连接哈希,它不会改变外部哈希函数的哈希冲突概率。

4

2 回答 2

3

假设“合理”的散列函数,然后通过连接,你所做的就是创建一个具有更大输出空间的散列函数。所以是的,这降低了碰撞的可能性。

但无论哪种方式,这可能都不值得担心。2^320 类似于宇宙中粒子的数量。因此,您只需要担心是否会遇到攻击者。

于 2013-01-11T03:29:52.683 回答
0

我一开始问错了问题。这可能是我一直在寻找的问题:

SHA1 冲突的概率

这也很有启发性

了解 sha-1 碰撞弱点

我想问我是否有两个连接大小小于 20 字节的散列函数说 2 个不同的 32 位散列函数是公平的。如果连接这些产生的概率小到足以在实践中忽略,因为连接的 2 个(甚至 3 个)将小于 SHA-1。

于 2013-01-11T03:49:26.900 回答