怎么不可能"解密"MD5哈希?

Rob*_*Rob 43 encryption hash md5

可能重复:
MD5哈希值怎么不可逆?

我正在读一个关于MD5的问题,它让我记住了令我难以置信的事情.非常简单的问题,如果它不是一个好的我很抱歉.我只是无法理解你是如何使用某种算法将某些东西转换为一种东西的,并且无法使用该算法反向转换回来.

那怎么可能呢?

此外,由于多个字符串可以创建相同的MD5哈希值,因为它的数据少于输入字符串,所以其他任何哈希系统如何更好?

Dav*_*d Z 104

基本上是因为MD5的输出包含的信息少于输入.这基本上是区分哈希算法和加密算法的原因.

这是一个简单的例子:想象一个算法来计算一个10位数的哈希值.该算法是"返回最后2位数".如果我采用8023798734的哈希值,我得到34,但是如果你只有34,你将无法分辨原始数字是什么,因为哈希算法丢弃了8位数的信息.它与MD5类似,不同之处在于散列是通过复杂的过程计算的,而不是仅仅切断部分数据.

那么一个哈希怎么能比另一个好呢?首先,不同的散列算法可以或多或少地抵抗冲突(当两个输入产生相同的输出时).碰撞的概率与可能的散列输出的数量成反比.碰撞是散列的一个不合需要的特性,因为如果你的数据发生了变化,你也希望散列也改变,所以获得更好的散列算法的一种方法是使用具有更多可能输出的散列.在上面的数字示例中,取最后4位数而不是最后2位数将与给定散列(技术上称为原)发生碰撞的概率降低到10000(而不是100)中的1,因此更有可能全部无论您拥有什么样的集合,10位数字都会有不同的哈希值.

还存在加密安全性问题.当您想使用散列来确保某些数据未被篡改时,任何进行篡改的人都无法预测哪些输入会产生给定的输出.如果可以,他们将能够以输出(散列)保持不变的方式改变输入数据.再回到数字示例,假设我要通过电子邮件向您发送电话号码1879483129 ,这个数字对您来说非常重要,这一点至关重要.我可能会打电话给你并告诉你数字的哈希值,这将是29,但由于"最后2位数"算法不是加密安全的,一个邪恶的黑客可以改变途中的号码,比如5555555529你不会不知道区别.

已经证明MD5不具有加密安全性(并且SHA-1也受到损害).这意味着可以找到与任何给定输出相对应的不同输入.它仍然是防止随机位翻转等的一个很好的算法,但是如果有人可能想要故意破坏你的数据,你应该使用更安全的东西,比如SHA-256或更高版本,可能是HMAC的一部分计划.


Tan*_*ena 83

我只是无法理解你是如何使用某种算法将某些东西转换为一种东西的,并且无法使用该算法反向转换回来.

你可以把牛变成汉堡包,但你不能把汉堡变成牛.

转换通过销毁它来减少存在的数据,并且无法恢复数据.

  • 就像汉堡包一样,哈希经常需要盐. (17认同)
  • 为我所见过的最具启发性的类比+1.嗯...哈希函数和汉堡包. (14认同)
  • 当然,你可以把汉堡包变成奶牛,就像你可以把炒鸡蛋变成鸡肉一样.你把汉堡包喂给小牛,然后长成一头牛.这是效率低下的,你在这个过程中浪费了很多美味的汉堡包,但它确实有效. (6认同)
  • @Remus,然后你运行一个非微不足道的疯牛病的机会.@Rob,将土豆变成小饼干会不那么冒犯?我自己,我也喜欢奶牛.他们味道很棒.+1到@tangurena进行初步比喻! (2认同)

Joe*_*Joe 17

这是一个平行的:

加上你家里每个人的年龄.只保留最后两位数字.

现在告诉我每个人的年龄基于那个数字.