有人告诉我,他见过的软件系统是:
那可能吗?我认为解密 MD5 哈希是不可能/可行的。
我知道有 MD5 字典,但是有实际的解密算法吗?
请您参考如下方法:
不。MD5 不是加密(尽管它可能用作某些加密算法的一部分),它是一种单向 hash function 。许多原始数据实际上作为转换的一部分“丢失”了。
想一想:MD5 总是 128 位长。这意味着有 2128 个可能的 MD5 哈希值。这是一个相当大的数字,但它绝对是有限的。然而,给定的哈希函数有无数可能的输入(其中大多数包含超过 128 位,或者只有 16 个字节)。因此,对于散列为相同值的数据,实际上有无数种可能性。使散列变得有趣的事情是,要找到散列为相同值的两条数据非常困难,而且偶然发生的几率几乎为 0。
(非常不安全的)散列函数的一个简单示例(这说明了它是单向的一般思想)是获取一段数据的所有位,并将其视为一个大数。接下来,使用一些大(可能是素数)数 n 执行整数除法并取余数(参见: Modulus )。你会得到一些介于 0 和 n 之间的数字。如果您再次执行相同的计算(任何时间、任何计算机、任何地方),使用完全相同的字符串,它将得出相同的值。然而,没有办法找出原始值是多少,因为当除以 n 时,有无数个具有精确余数的数字。
也就是说,已经发现 MD5 有一些弱点,例如通过一些复杂的数学运算,可能可以在不尝试 2128 个可能的输入字符串的情况下找到碰撞。大多数密码都很短,而且人们经常使用通用值(如“密码”或“ secret ”)这一事实意味着在某些情况下,您可以通过谷歌搜索哈希值或使用 Rainbow table 对某人的密码进行合理猜测.这就是为什么你应该总是“salt”散列密码的原因之一,这样两个相同的值在散列时不会散列到相同的值。
一旦通过哈希函数运行了一段数据,就没有回头路了。