我最近读到MD5不安全,因为它可以在很短的时间内跟踪。
如果我只提供固定的512位数据作为输入。 MD5将提供128位散列(32个十六进制值)
如果MD5存在缺陷,那么在给定128位散列的情况下,任何人都可以建议重建512位输入的最佳方法吗?
(旁注:我非常希望实现这一点。对于内置的安全包,C ++是速度还是Java的更好选择?)
答案 0 :(得分:0)
MD5是一种简单快速的算法,特别是在使用GPU实现时,因此它可以通过强力破解,这就是为什么它不安全的原因。 但是它不安全的典型背景是密码方面的字符数量有限及其典型组合(字典世界)
对于512bit长的消息,即使使用MD5,暴力破解也会花费太长时间,相当于64个字符的密码,目前暴力攻击限制大约为10个字符。
答案 1 :(得分:0)
有2 ** 384(约4x10 ** 115)个不同的512位块,它们散列到同一个MD5。即使原则上也不可能进行逆转。
然而, 可能找到那些4x10 ** 115块中的一个,它们产生与你想要的块相同的MD5,并且&# 39; s 为什么它被认为是不安全的。例如,如果您将文件与MD5哈希一起发布到网络以验证其完整性,则黑客可能能够将其替换为具有相同哈希的不同文件。使用像SHA256这样更安全的哈希,即使这样也不可能。