我对密码学知之甚少,但当然,在很多场合都会遇到神奇的md5()黑盒子。现在,经过一番搜索,我已经能够找到许多问题,并且为什么不能反转?"答案符合"因为输出是非唯一的。"鉴于密码(或任何值)是根据哈希值(而不是原始值)进行评估的,因此知道原始密码并不重要,所有您真正需要访问用户帐户的任何内容都是输入将给出该哈希值。所以,我的问题是:
为什么不能对md5进行逆向工程以从输出生成输入(任何输入,不一定是原始输入)(实际功能毕竟是公开的)?< / p>
实施例: 如果我有一个带字符串的哈希函数,为每个字符分配一个数字值,然后添加这些值,我可以通过获取输出,分解它并将因子重新组织成一个字符串来轻松地反转该函数(它赢了&#39 ; t是原始字符串,但它会给出相同的哈希)。那么为什么不能倒退?
答案 0 :(得分: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
维基百科有关于所使用的特定算法的信息:
答案 1 :(得分:0)
主要的是多个输入可以实现相同的输出。此外,由于操作链接在一起并且操作的每个阶段都具有相同的行为,因此每次尝试反向“向后”时,都会有多个可能的答案 - 其中许多答案。这是使其成为“单向”的基本特征。