是否有可能解密MD5哈希?

有人告诉我,他已经看到了软件系统可以接受MD5encryption密码(通过与其他系统的各种集成),解密它们,并使用自己的algorithm将它们存储在系统自己的数据库中。

那可能吗? 我认为解密MD5哈希是不可能的(可行)。

我知道有MD5字典,但有一个实际的解密algorithm?

不。MD5不是encryption的(虽然它可能被用作一些encryptionalgorithm的一部分),但它是一种单向散列函数 。 作为转型的一部分,大部分原始数据实际上是“丢失”的。

想一想:MD5总是128位长。 这意味着有2 128个可能的MD5散列。 这是一个相当大的数字,但它肯定是有限的。 然而,对于一个给定的哈希函数,有大量可能的input(其中大多数包含超过128位,或者只有16个字节)。 所以实际上有无数的数据可能散列到相同的值。 令人感兴趣的是,要find两个哈希值相同的数据是非常困难的,偶然发生的几率几乎为零。

(非常不安全的)散列函数的一个简单的例子(这个例子说明了它是单向的)的一个总体思路是获取一块数据的所有位,并将其视为一个大数。 接下来,使用一些大的(可能是素数) n来进行整数除法,并取其余部分(见: 模量 )。 你会留下一些介于0和n之间的数字。 如果您再次执行相同的计算(任何时候,在任何计算机上,任何地方),使用完全相同的string,它会得到相同的值。 然而,没有办法找出原始值是什么,因为除了n之外,有无穷多的数字有确切的余数。

也就是说,MD5已经被发现有一些弱点,例如有了一些复杂的math,有可能在没有尝试2 128个可能的inputstring的情况下find一个碰撞。 事实上,大多数密码是短的,人们经常使用共同的价值(如“密码”或“秘密”)意味着,在某些情况下,你可以通过谷歌search或使用彩虹一个合理的猜测某人的密码表 。 这就是为什么你应该总是使用“ salt ”哈希密码的原因之一,所以在哈希时,两个相同的值不会哈希到相同的值。

一旦一个数据已经通过散列函数运行,就没有回头路了。

你不能。 散列的整个意义在于它只是一种方式。 这意味着如果有人设法得到MD5哈希列表,他们仍然不能得到您的密码。 (不是说MD5是安全的,但不用担心。)另外,这意味着即使有人在多个站点上使用相同的密码(是的,我们都知道我们不应该,但是…)pipe理员的网站A将无法在网站B上使用用户的密码

即使你可以,你也不应该给他们发邮件给他们 – 这些敏感信息可能会保持敏感。

相反,请根据只能使用一次的时间戳哈希值创build一个重置密码的工具。 通过电子邮件向他们发送包含时间戳哈希值的URL,并在该URL允许他们更改密码。 另外,如果可以的话,在短时间(例如24小时)之后使时间戳哈希到期,以便即使不更改密码(因为它们不login),漏洞窗口也会减less。

许多系统会生成一个新的随机密码和电子邮件给他们,迫使他们在首次login时更改它。 这是不可取的,因为有人可以通过强制密码重设表单来更改系统中的每个密码。

从技术上讲,这是“可能的” ,但是在非常严格的条件下 ( 彩虹表 ,基于用户密码在该散列数据库中的极小可能性的暴力强制)。

但是,这并不意味着

  • 可行
    要么
  • 安全

你不想“颠倒”一个MD5散列。 使用下面概述的方法,你将永远不需要。 MD5实际上被认为是恶意的 – 一些网站提供了破解MD5哈希的能力 – 但它们都是包含字典单词,以前提交的密码和其他单词的海量数据库。 有一个很小的机会 ,它将有MD5哈希你需要扭转。 如果你已经腌制 MD5散列 – 这也不行! 🙂


使用MD5哈希login的方式应该是:

注册期间:
用户创build密码 – >使用MD5散列密码 – >存储在数据库中的散列

login期间:
用户input用户名和密码 – >(用户名选中)使用MD5对密码进行散列 – >将散列与数据库中存储的散列进行比较

当需要“丢失密码”时:

2个选项:

  • 用户发送了一个随机密码login,然后在第一次login时被修改。

要么

  • 用户被发送一个链接来改变他们的密码(如果你有一个安全问题/等额外的检查),然后新的密码被散列,并用数据库中的旧密码replace

不直接。 由于鸽子的原理 ,有可能有不止一个值与任何给定的MD5输出相关。 因此,你不能确定地扭转它。 此外,使MD5难以find任何这样的颠倒的散列(然而已经发生了产生冲突的攻击 – 即产生两个散列到相同结果的值,但是不能控制产生的MD5值将会是什么是)。

但是,如果将search空间限制为长度小于N的常用密码,则可能不再具有不可逆性属性(因为MD5输出的数量远大于感兴趣的域中的string数)。 那么你可以使用彩虹表或类似的反转散列。

不可能,至less不是在合理的时间内。

这通常被处理的方式是密码“重置”。 也就是说,你给他们一个新的(随机)密码,并通过电子邮件发送给他们。

您无法还原md5密码(使用任何语言)

但是你可以:

给用户一个新的。

检查一些彩虹表,也许检索旧的。

重新设定密码的适当方法之一

数据库示例

用户

 user_id | email_id | password | reset_token | pwd_expiry 1 | abc@abc.com | kladsjflk | roiurwerols | 2012-10-21 11:43:34 

忘记密码

在这里,取email_id并检查其在数据库Users存在,如果是,则随机编号/字母数字或unixtimestamp并将该string转换为散列值,并用转换/散列string更新字段reset_token

现在采取(user_id或email_id)和reset_token并build立一个像下面的链接

reset_password.html?user=1&token=roiurwerols

并将此链接发送给用户。

重设密码

现在,当用户点击链接时,使用GET方法从链接获取参数值。 检查user_id是否有数据库中的1reset_token ,如果这些值存在则条件为真,用户可以更新/重置密码。 密码更新/重置后,然后使reset_token emptyuser_id [请确保,写入SQL查询正确]

这就是它..如果你想添加重置密码过期,然后在Users表中添加一个字段与pwd_expiry ,然后使在reset_password的条件比your desired hourstodays date

不,他一定对MD5字典感到困惑。

encryption散列(MD5等)是一种方法除非您有关于原始消息等的其他信息, 否则只有摘要才能回到原始消息。

解密(以algorithm的方式直接从哈希值中获取纯文本),否。

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

MD5是散列algorithm,你不能恢复散列值。

你应该添加“更改密码function”,在那里用户提供另一个密码,计算散列并将其存储为一个新的密码。

有没有简单的方法来做到这一点。 这首先是对密码进行哈希处理的一点。 🙂

应该能做的一件事就是手动设置一个临时密码并发送给他们。

我毫不犹豫地提到这个,因为这是一个坏主意(反正也不能保证工作),但是你可以试着在milw0rm这样的彩虹表中查找哈希,看看你是否可以这样恢复旧的密码。

在这里看到所有其他的答案,关于如何和为什么它是不可逆的,为什么你不想要。

尽pipe如此,有彩虹桌 ,你可以查找可能的比赛。 彩虹表中的答案并不能保证你的用户select的原始密码,这样会使他们大失所望。

另外,这对于腌制的哈希不起作用。 许多安全专家build议进行腌制 。

不,不能做。 要么你可以使用字典,或者你可以尝试散列不同的值,直到你得到你正在寻找的散列。 但它不能被“解密”。

在find哈希函数的反函数方面,没有办法“恢复”哈希函数。 如前所述,这是具有散列函数的全部要点。 它不应该是可逆的,它应该允许快速哈希值计算。 所以find一个产生给定散列值的inputstring的唯一方法是尝试所有可能的组合。 这就是所谓的powershell攻击。

尝试所有可能的组合需要花费大量的时间,这也是为什么散列值用于以相对安全的方式存储密码的原因。 如果攻击者能够使用所有用户密码访问您的数据库,则无论如何都会丢失。 如果您有散列值和(理想地讲)强密码,那么将密码从攻击者的散列值中取出将会困难得多。

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

您可以find使用词典检索原始邮件的在线工具。
在某些情况下,字典方法可能是无用的:
– 如果使用SALT消息散列消息
– 如果消息不止一次散列
例如,这里是一个MD5解密器在线工具!
大卫

MD5被认为是坏的,不是因为你可以从哈希中获取原始内容,而是因为在工作中,你可以创build两个哈希到相同哈希的消息。

您不能取消散列MD5散列。

MD5有其弱点(参见Wikipedia ),所以有一些项目试图预先计算Hashes。 维基百科也暗示了其中一些项目。 我所知道的(和尊重)是ophrack。 你不能告诉用户自己的密码,但是你可以告诉他们一个可以使用的密码。 但是我想:只要邮寄一个新的密码,以防万一他们忘了。

唯一可以工作的是(如果我们提到密码只是散列,而不添加任何种类的盐来防止重放攻击,如果是这样,你必须知道盐),得到一个字典攻击工具,许多单词,数字等文件,然后创build两行,一行是单词,数字(在字典中)另一个是散列的单词,并比较哈希如果匹配你得到它…

这是唯一的方法,而不用进入密码分析。

MD5哈希algorithm是不可逆的,所以MD5解码是不可能的,但有些网站有大量的密码匹配,所以你可以尝试在线解码MD5哈希。

在线试用:

MD5解密

md5online

md5decrypter

是的,正是你所要求的是可能的。 无法在没有帮助的情况下“解密”MD5密码是不可能的,但是可以将MD5密码重新encryption成另一种algorithm,而不是一个一个的。

您所做的是安排您的用户使用旧的MD5密码login到新系统。 在他们login的时候,他们已经为您的login程序提供了一个未经encryption的密码版本,certificate您的密码与您拥有的MD5哈希值相匹配。 然后,您可以将此非密码转换为新的散列algorithm。

显然,这是一个扩展的过程,因为你必须等待你的用户告诉你密码是什么,但它确实有效。

(注意:七年后,哦,希望有人会觉得它有用)

现在还不可能把一个密码散列到一个algorithm中,并且以纯文本的forms取回密码,因为散列是一个单向的事情。 但是人们所做的就是生成散列并将其存储在一个大表中,这样当你input一个特定的散列值时,它将检查表中与散列值匹配的密码,并将密码返回给你。 一个网站的例子是http://www.md5online.org/ 。 现代密码存储系统通过使用腌制algorithm来对此进行计数,使得当在注册期间在密码框中input相同的密码时生成不同的哈希值。

在理论上你不能解密,但你有一些肮脏的技术来获取原始纯文本。

  1. Bruteforcing :所有的计算机安全algorithm遭受暴力破坏 。 基于这个想法,今天的GPU采用了并行编程的思想,利用它可以通过使用任何graphics处理器对其进行大规模强化,从而获得纯文本。 这个工具hashcat做这个工作。 上次我检查了它的cuda版本后,我能够在六分钟内暴露一个长度为7个字母的字符。
  2. 另一种技术可能看起来有点笨,但是相信我这样做对于弱密码来说是很有效的。 只需复制并粘贴在谷歌散列,看看如果你可以在那里find相应的明文。 这是不是一个解决scheme,当你是pentesting东西,但绝对值得一试。 有些网站维护字典中几乎所有单词的散列。

你可以用一种方法,尝试在线MD5 Decrypter工具 。

http://www.md5decrypt.net/en/Api/在这里注册电子邮件地址,并获得API代码和设置代码;

 <?php $hash = "62318aca2ef2e809a13623715a8aaff4";// here is dercept $hash_type = "md5"; $email = "Your email address"; $code = "bb256c018fe1e120";// recived code here $response = file_get_contents("http://md5decrypt.net/Api/api.php?hash=".$hash."&hash_type=".$hash_type."&email=".$email."&code=".$code); echo $response; ?> 

更多…