本文介绍了128位的SHA-1散列比MD5散列更安全吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

SHA-1被认为比MD5更安全至少有两个原因:更大的哈希(160位对128位)和更好的哈希函数。

我需要在几百万个字符串上生成散列。一般来说,即使是MD5,发生碰撞的可能性也应该非常低。我知道MD5已经很老了,总体上不被认为是安全的,但在我的情况下,故意攻击不是问题(没有外部访问,没有动机,等等)。我只需要一个相当安全的散列函数,没有浪费太多的比特和128比特应该是足够的。所以我在想,如果我只得到SHA-1散列的前128位,会不会比MD5的128位要好?我说的更好是指不太可能导致冲突。

推荐答案

我使用4,292,907个不同的字符串运行了几个实际测试。我使用了一个长达11个字符的十六进制散列的子字符串(换句话说,44位部分)。示例:

  HASH: 629a09633488e9b2aaf2f5a606706da3
Test 1: 629a0963348
Test 2:  29a09633488
Test 3:   9a09633488e
...

理论上,我计算出碰撞的概率为~41%(基于生日悖论概率&公式)。但这只是理论,它假设的是真正的随机分布。因此,我想对MD5和SHA-1进行经验测试,并查看结果。它们如下所示(右侧的数字显示冲突的数量):

[MD5]             [SHA-1]
Test No  1: 2     Test No  1: 0
Test No  2: 0     Test No  2: 0
Test No  3: 1     Test No  3: 0
Test No  4: 0     Test No  4: 1
Test No  5: 0     Test No  5: 0
Test No  6: 0     Test No  6: 1
Test No  7: 1     Test No  7: 0
Test No  8: 2     Test No  8: 0
Test No  9: 1     Test No  9: 0
Test No 10: 1     Test No 10: 0
Test No 11: 0     Test No 11: 1
Test No 12: 0     Test No 12: 1
Test No 13: 0     Test No 13: 0
Test No 14: 0     Test No 14: 1
Test No 15: 0     Test No 15: 1
Test No 16: 0     Test No 16: 1
Test No 17: 1     Test No 17: 1
Test No 18: 1     Test No 18: 1
Test No 19: 0     Test No 19: 0
Test No 20: 0     Test No 20: 1
TOTAL: 8          TOTAL: 10           // No of tests with at least 1 collision
结论:与通过生日悖论概率公式计算的理论概率相比,MD5和SHA-1的碰撞概率都没有显著降低。我知道这个测试并不完美,应该持保留态度,但至少对我来说,它表明我可以在很大程度上依赖于通过理论公式计算碰撞的几率,担心我的计算与事实相差太远。

这篇关于128位的SHA-1散列比MD5散列更安全吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-23 20:13