Hash “怎么可能是不可能的?”;“解密”;MD5哈希?

Hash “怎么可能是不可能的?”;“解密”;MD5哈希?,hash,md5,encryption,Hash,Md5,Encryption,可能重复: 我在读一个关于MD5的问题,它让我想起了一些让我感到困惑的事情。非常简单的问题,如果不是个好问题,我很抱歉。我只是不明白你是如何用某种算法把一件东西转换成一件东西的,而且没有办法用相反的算法把它转换回来 那么这怎么可能呢 此外,由于多个字符串可以创建相同的MD5哈希,因为它的数据比输入字符串少,其他哈希系统如何更好?基本上是因为MD5的输出包含的信息比输入少。这就是散列算法与加密算法的基本区别 这里有一个简单的例子:想象一个算法来计算一个10位数字的散列。算法是“返回最后2位数字”

可能重复:

我在读一个关于MD5的问题,它让我想起了一些让我感到困惑的事情。非常简单的问题,如果不是个好问题,我很抱歉。我只是不明白你是如何用某种算法把一件东西转换成一件东西的,而且没有办法用相反的算法把它转换回来

那么这怎么可能呢


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

基本上是因为MD5的输出包含的信息比输入少。这就是散列算法与加密算法的基本区别

这里有一个简单的例子:想象一个算法来计算一个10位数字的散列。算法是“返回最后2位数字”。如果我取8023798734的散列,我得到34,但如果你只有34,你将无法知道原始数字是什么,因为散列算法丢弃了8位信息。它与MD5类似,只是散列是通过一个复杂的过程计算的,而不是仅仅截断部分数据

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

还有密码安全问题。当您希望使用散列来确保某些数据未被篡改时,最好是篡改者不能预测哪些输入将产生给定的输出。如果可以,他们将能够以输出(散列)保持不变的方式更改输入数据。再次回到数字示例,假设我将给您发送电子邮件号码1879483129,该号码保持不变至关重要。我可能会打电话给你,告诉你这个数字的散列值,应该是29,但由于“最后2位”算法在加密方面不安全,一个邪恶的黑客可能会在途中把这个数字改成555529,你不会知道其中的区别


已经证明(和)。这意味着可以找到对应于任何给定输出的不同输入。这仍然是一个很好的防止随机位翻转的算法,但是如果有人可能有意破坏您的数据,您应该使用更安全的算法,比如SHA-256或更高版本。

这里有一个简单的答案

散列值的数量是有限的,可散列的明文值的数量是无限的

因此,反转给定的MD5散列将导致无限多个可能的明文值。

这里有一个类似的例子:

把你家里每个人的年龄加起来。只保留最后两位数字

现在根据这个数字告诉我每个人的年龄。

想想这个:

我有一个数字字符串,比如说“12345678”

我有一个散列算法,它只返回所有单个数字的和,我们称之为f()

因此,f(“12345678”)=1+2+..+8=36

那么问题是:

已知f(x)=36,是否有可能得到x的原始值? 我们不能,因为f()是一种导致信息丢失的算法

MD5是一种类似于f()的散列算法,但要复杂得多

我只是不明白你是如何用某种算法把一件东西转换成一件东西的,而且没有办法用相反的算法把它转换回来

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


转换通过销毁现有数据来减少数据,而这些数据无法恢复

在回答您问题的第二部分时(上文中其他人对第一部分给出了充分的答案):MD5被认为是弱的,因为有证据证明对密码的攻击(即,可以在纯文本中进行的更改不会导致MD5和的更改)。其他散列技术可能不太容易受到本质上任意散列冲突的影响(至少到目前为止,SHA-2散列集等还没有证明这种任意冲突是可能的),因此,攻击者不太可能复制在非MD5技术中散列的散列(当然,从理论上讲,任何散列函数都可能受到散列冲突攻击;如果不是这样,作为散列函数就不会成功;问题是攻击者“伪造”一个“正确”的明文,即散列到相同散列值的明文有多容易)

顺便说一句,明文的MD5和不一定是安全的,因为它包含“较少”数据或“有损”,但因为它从任意明文计算固定范围内的和值(对于明文<128位,MD5和实际上包含比明文更多的信息…),因此是一个数字(理论上无限)所有的纯文本都可以对齐到相同的MD5哈希

另外,由于可以使用多个字符串 因此,创建相同的MD5哈希 数据少于输入字符串, 其他哈希系统会是什么样的 更好吗

虽然确实存在多个(e