有人告诉我,他见过这样的软件系统:
从其他系统检索MD5加密密码; 解密加密的密码和 使用系统自己的算法将密码存储在系统的数据库中。
这可能吗?我认为解密MD5哈希是不可能/可行的。
我知道有MD5字典,但是有真正的解密算法吗?
有人告诉我,他见过这样的软件系统:
从其他系统检索MD5加密密码; 解密加密的密码和 使用系统自己的算法将密码存储在系统的数据库中。
这可能吗?我认为解密MD5哈希是不可能/可行的。
我知道有MD5字典,但是有真正的解密算法吗?
当前回答
无法恢复md5密码。(任何语言)
但是你可以:
给用户一个新的。
找个彩虹表,也许能找回旧的。
其他回答
不。MD5不是加密(尽管它可能被用作一些加密算法的一部分),它是一个单向哈希函数。作为转换的一部分,大部分原始数据实际上“丢失”了。
Think about this: An MD5 is always 128 bits long. That means that there are 2128 possible MD5 hashes. That is a reasonably large number, and yet it is most definitely finite. And yet, there are an infinite number of possible inputs to a given hash function (and most of them contain more than 128 bits, or a measly 16 bytes). So there are actually an infinite number of possibilities for data that would hash to the same value. The thing that makes hashes interesting is that it is incredibly difficult to find two pieces of data that hash to the same value, and the chances of it happening by accident are almost 0.
A simple example for a (very insecure) hash function (and this illustrates the general idea of it being one-way) would be to take all of the bits of a piece of data, and treat it as a large number. Next, perform integer division using some large (probably prime) number n and take the remainder (see: Modulus). You will be left with some number between 0 and n. If you were to perform the same calculation again (any time, on any computer, anywhere), using the exact same string, it will come up with the same value. And yet, there is no way to find out what the original value was, since there are an infinite number of numbers that have that exact remainder, when divided by n.
That said, MD5 has been found to have some weaknesses, such that with some complex mathematics, it may be possible to find a collision without trying out 2128 possible input strings. And the fact that most passwords are short, and people often use common values (like "password" or "secret") means that in some cases, you can make a reasonably good guess at someone's password by Googling for the hash or using a Rainbow table. That is one reason why you should always "salt" hashed passwords, so that two identical values, when hashed, will not hash to the same value.
一旦一段数据通过哈希函数运行,就没有回头路了。
理论上,对哈希值进行解密是不可能的,但您可以使用一些肮脏的技术来获取原始的纯文本。
Bruteforcing: All computer security algorithm suffer bruteforcing. Based on this idea today's GPU employ the idea of parallel programming using which it can get back the plain text by massively bruteforcing it using any graphics processor. This tool hashcat does this job. Last time I checked the cuda version of it, I was able to bruteforce a 7 letter long character within six minutes. Internet search: Just copy and paste the hash on Google and see If you can find the corresponding plaintext there. This is not a solution when you are pentesting something but it is definitely worth a try. Some websites maintain the hash for almost all the words in the dictionary.
不可能,至少在合理的时间内是不可能的。
通常的处理方式是密码“重置”。也就是说,你给他们一个新的(随机的)密码,并在电子邮件中发送给他们。
在寻找哈希函数的逆函数方面,没有办法“恢复”哈希函数。如前所述,这就是哈希函数的意义所在。它不应该是可逆的,它应该允许快速哈希值计算。因此,找到产生给定哈希值的输入字符串的唯一方法是尝试所有可能的组合。这就是所谓的蛮力攻击。
尝试所有可能的组合需要花费大量时间,这也是为什么使用哈希值以相对安全的方式存储密码的原因。如果攻击者能够访问您的数据库,其中包含所有用户密码,那么无论如何您都会失败。如果您有哈希值和(理想地说)强密码,那么攻击者将很难从哈希值中获取密码。
存储哈希值也没有性能问题,因为计算哈希值相对较快。因此,大多数系统所做的是计算用户输入的密码的哈希值(这很快),然后将其与用户数据库中存储的哈希值进行比较。
是的,你所要求的一切都是可能的。 在没有帮助的情况下“解密”MD5密码是不可能的,但是可以将MD5密码重新加密到另一种算法中,只是不能一蹴而就。
您要做的就是让用户能够使用旧的MD5密码登录到新系统。在他们登录时,他们已经给了你的登录程序一个未加密的密码版本,你证明与你拥有的MD5哈希匹配。然后,您可以将这个非散列密码转换为新的散列算法。
显然,这是一个扩展的过程,因为您必须等待用户告诉您密码是什么,但它确实有效。
(注意:七年后,哦,希望有人会发现它有用)