为什么不能对md5进行逆向工程?

djh*_*101 1 hash md5 cryptography

我对密码学知之甚少,但当然在很多场合遇到了神奇的md5()黑盒子.现在,经过一番搜索,我找到了许多问题:"为什么不能颠倒?" 答案是"因为输出是非独特的".鉴于密码(或任何值)是根据哈希值(而不是原始值)进行评估的,因此知道原始密码并不重要,所有您真正需要访问用户帐户的任何输入都将提供该哈希值.所以,我的问题:

为什么不能对md5进行逆向工程以从输出生成输入(任何输入,不一定是原始输入)(毕竟,实际功能是公开可用的)?

示例:如果我有一个带字符串的哈希函数,为每个字符分配一个数字值,然后添加这些值,我可以通过获取输出,分解它并将因子重新组织成一个字符串来轻松地反转该函数(它赢了不是原始字符串,但它会给出相同的哈希值.那么为什么md5不能倒退呢?

Okk*_*aaj 5

这是一种单向公式.在特定字符串上运行MD5或SHA1会产生始终相同的哈希值.无法将函数反转以返回原始字符串.

例如:

15 Mod 4 = 3

即使你知道公式是

x Mod 4

你不能推断x,因为它可能是3,7,11,15等......

显然MD5和SHA1要复杂得多!

在上面的例子中,输入15将总是给你3的答案,但没有人能够推断出原始数字.这确实可以很好地解决多个输入字符串可以提供相同哈希的冲突:

http://en.wikipedia.org/wiki/MD5#Collision_vulnerabilities

维基百科有关于所用特定算法的信息:

http://en.wikipedia.org/wiki/MD5#Algorithm

来源/信用: 为什么MD5/SHA1密码哈希无法解密?