有人告诉我,他见过这样的软件系统:

从其他系统检索MD5加密密码; 解密加密的密码和 使用系统自己的算法将密码存储在系统的数据库中。

这可能吗?我认为解密MD5哈希是不可能/可行的。

我知道有MD5字典,但是有真正的解密算法吗?


当前回答

在这里可以看到所有其他的答案,关于它如何以及为什么不可逆,以及为什么你不想这样做。

为了完整起见,这里有彩虹表,你可以在上面查找可能的匹配。不能保证彩虹表中的答案是用户选择的原始密码,这样会使用户非常困惑。

同样,这也不适用于咸散列。许多安全专家都建议用盐腌制。

其他回答

It is not yet possible to put in a hash of a password into an algorithm and get the password back in plain text because hashing is a one way thing. But what people have done is to generate hashes and store it in a big table so that when you enter a particular hash, it checks the table for the password that matches the hash and returns that password to you. An example of a site that does that is http://www.md5online.org/ . Modern password storage system counters this by using a salting algorithm such that when you enter the same password into a password box during registration different hashes are generated.

解密(直接从散列值中获取纯文本,以一种算法方式),没有。

然而,有一些方法使用所谓的彩虹表。如果你的密码是没有盐的散列,这是非常可行的。

在这里可以看到所有其他的答案,关于它如何以及为什么不可逆,以及为什么你不想这样做。

为了完整起见,这里有彩虹表,你可以在上面查找可能的匹配。不能保证彩虹表中的答案是用户选择的原始密码,这样会使用户非常困惑。

同样,这也不适用于咸散列。许多安全专家都建议用盐腌制。

在寻找哈希函数的逆函数方面,没有办法“恢复”哈希函数。如前所述,这就是哈希函数的意义所在。它不应该是可逆的,它应该允许快速哈希值计算。因此,找到产生给定哈希值的输入字符串的唯一方法是尝试所有可能的组合。这就是所谓的蛮力攻击。

尝试所有可能的组合需要花费大量时间,这也是为什么使用哈希值以相对安全的方式存储密码的原因。如果攻击者能够访问您的数据库,其中包含所有用户密码,那么无论如何您都会失败。如果您有哈希值和(理想地说)强密码,那么攻击者将很难从哈希值中获取密码。

存储哈希值也没有性能问题,因为计算哈希值相对较快。因此,大多数系统所做的是计算用户输入的密码的哈希值(这很快),然后将其与用户数据库中存储的哈希值进行比较。

MD5被认为是坏的,不是因为您可以从散列中获得原始内容,而是因为通过工作,您可以生成两个散列到相同散列的消息。

不能取消MD5哈希。