有人告诉我,他见过这样的软件系统:
这可能吗?我认为解密MD5哈希是不可能/可行的。
我知道有MD5字典,但是有真正的解密算法吗?
不。MD5不是加密(尽管它可能被用作某些加密算法的一部分),它是一种单向哈希函数。作为转换的一部分,大部分原始数据实际上“丢失”了。
想想看:MD5总是128位长。这意味着有2128个可能的MD5哈希值。这是一个相当大的数字,但它绝对是有限的。然而,一个给定的哈希函数有无限个可能的输入(其中大多数包含超过128位,或者只有可怜的16字节)。所以实际上有无数种可能的数据哈希到相同的值。让哈希变得有趣的是,要找到哈希到相同值的两个数据是非常困难的,而且它意外发生的几率几乎为0。
一个简单的(非常不安全的)哈希函数的例子(这说明了它是单向的一般思想)是取一块数据的所有位,并将其视为一个大数字。接下来,使用一些较大的(可能是素数)数n执行整数除法并取余数(参见:模量)。你将得到一个介于0和n之间的数字。如果您再次执行相同的计算(任何时间,任何计算机,任何地方),使用完全相同的字符串,它将得到相同的值。然而,没有办法找出原始值是什么,因为有无限个数字具有相同的余数,当除以n。
也就是说,MD5已经被发现有一些弱点,比如在一些复杂的数学中,可能不需要尝试2128可能的输入字符串就能找到冲突。事实上,大多数密码都很短,而且人们经常使用共同的值(如“password”或“secret”),这意味着在某些情况下,你可以通过谷歌哈希或使用彩虹表来合理地猜测某人的密码。这就是为什么你总是应该“盐”散列密码的一个原因,这样两个相同的值,当散列时,将不会散列为相同的值。
一旦一段数据通过哈希函数运行,就没有回头路了。
不直接。由于鸽子洞原理,有(可能)多个值散列到任何给定的MD5输出。因此,你不能肯定地扭转它。此外,MD5被设计成很难找到任何这样的反向哈希(然而,已经有攻击产生碰撞 -也就是说,产生两个哈希到相同结果的值,但你不能控制最终的MD5值)。
但是,如果将搜索空间限制为长度小于N的普通密码,则可能不再具有不可逆性属性(因为MD5输出的数量远远大于感兴趣域中的字符串数量)。然后你可以使用彩虹表或类似的方法来反向哈希。
不,这是不可能的。您可以使用字典,也可以尝试散列不同的值,直到获得您正在寻找的散列。但它无法被“解密”。
不,他一定是被MD5字典搞糊涂了。
密码学哈希(MD5等)是的一种方法,你不能回到原始消息只有摘要除非,你有一些关于原始消息的其他信息,等等,你不应该。
MD5被认为是坏的,不是因为您可以从散列中获得原始内容,而是因为通过工作,您可以生成两个散列到相同散列的消息。
不能取消MD5哈希。
解密(直接从散列值中获取纯文本,以一种算法方式),没有。
然而,有一些方法使用所谓的彩虹表。如果你的密码是没有盐的散列,这是非常可行的。
理论上,你不能。哈希的意义在于它是单向的。这意味着如果有人设法获得哈希列表,他们仍然无法获得您的密码。此外,这意味着即使有人在多个网站上使用相同的密码(是的,我们都知道我们不应该这样做,但是……)任何访问站点A的数据库的人都不能在站点B上使用该用户的密码。
MD5是哈希的事实也意味着它会丢失信息。对于任何给定的MD5哈希,如果您允许密码的任意长度,则可能有多个密码产生相同的哈希。对于一个好的哈希,在计算上无法找到超出一个相当微不足道的最大长度的密码,但这意味着没有保证,如果你找到一个具有目标哈希的密码,它肯定是原始密码。它是非常不可能,你会看到两个只有ascii,合理长度的密码具有相同的MD5哈希,但这不是不可能的。
MD5是一个不好的哈希密码:
我不是安全专家,所以除了“不要使用自己的身份验证系统”之外,我不会给出具体的建议。从信誉良好的供应商那里找一个,然后使用它。安全系统的设计和实现都是一项棘手的工作。
不可能,至少在合理的时间内是不可能的。
通常的处理方式是密码“重置”。也就是说,你给他们一个新的(随机的)密码,并在电子邮件中发送给他们。
MD5是一种哈希算法,不能还原哈希值。
您应该添加“更改密码功能”,用户提供另一个密码,计算散列并将其存储为新密码。
要做到这一点并不容易。这就是首先对密码进行哈希的意义。:)
你应该能够做的一件事是为他们手动设置一个临时密码并发送给他们。
我不愿提及这一点,因为这是一个坏主意(而且无论如何也不能保证有效),但你可以尝试在像milw0rm这样的彩虹表中查找散列,看看是否可以通过这种方式恢复旧密码。
从技术上讲,这是“可能的”,但在非常严格的条件下(彩虹表,基于用户密码在该散列数据库中非常小的可能性的暴力强制)。
但这并不意味着它是
你不想“反转”MD5哈希值。使用下面列出的方法,你永远不需要。“反转”MD5实际上被认为是恶意的——一些网站提供了“破解”和暴力破解MD5哈希的能力——但它们都是包含字典单词、以前提交的密码和其他单词的庞大数据库。有一个可能性很小,它将具有你需要反转的MD5散列。如果你有咸 MD5哈希-这也不会工作!:)
或 < br >
无法恢复md5密码。(任何语言)
但是你可以:
给用户一个新的。
找个彩虹表,也许能找回旧的。
在这里可以看到所有其他的答案,关于它如何以及为什么不可逆,以及为什么你不想这样做。
不过为了完整起见,你可以在彩虹表上查找可能的匹配项。不能保证彩虹表中的答案是用户选择的原始密码,这样会使用户非常困惑。
同样,这也不适用于咸散列。盐是许多安全专家推荐的。
MD5有它的弱点(参见维基百科),因此有一些项目试图预先计算哈希值。维基百科也暗示了其中一些项目。我所知道(并且尊敬)的一个是ophrack。您不能告诉用户他们自己的密码,但您可以告诉他们一个有效的密码。但我想:还是给他们寄个新密码吧,以防他们忘了。
在寻找哈希函数的逆函数方面,没有办法“恢复”哈希函数。如前所述,这就是哈希函数的意义所在。它不应该是可逆的,它应该允许快速哈希值计算。因此,找到产生给定哈希值的输入字符串的唯一方法是尝试所有可能的组合。这就是所谓的蛮力攻击。
尝试所有可能的组合需要花费大量时间,这也是为什么使用哈希值以相对安全的方式存储密码的原因。如果攻击者能够访问您的数据库,其中包含所有用户密码,那么无论如何您都会失败。如果您有哈希值和(理想地说)强密码,那么攻击者将很难从哈希值中获取密码。
存储哈希值也没有性能问题,因为计算哈希值相对较快。因此,大多数系统所做的是计算用户输入的密码的哈希值(这很快),然后将其与用户数据库中存储的哈希值进行比较。
唯一可以工作的是(如果我们提到密码只是散列,没有添加任何类型的盐来防止重放攻击,如果是这样,你必须知道盐)顺便说一句,得到一个字典攻击工具,许多单词,数字等文件,然后创建两行,一行是单词,数字(在字典中),另一个是单词的散列,并比较散列,如果匹配你得到它…
这是唯一的方法,不用进行密码分析。
您可以找到使用字典检索原始消息的在线工具。
在某些情况下,dictionary方法可能是无用的:
例如,这里有一个MD5解密在线工具。
在理论上不可能解密哈希值,但你有一些肮脏的技术,以获得原始的纯文本。
MD5哈希算法是不可逆的,所以MD5解码在不可能,但一些网站有批量设置密码匹配,所以你可以尝试在线解码MD5哈希。
在网上试试:
MD5解密
md5online
md5decrypter
您要做的就是让用户能够使用旧的MD5密码登录到新系统。在他们登录时,他们已经给了你的登录程序一个处理版本的密码,你证明与你拥有的MD5哈希匹配。然后,您可以将这个非散列密码转换为新的散列算法。
显然,这是一个扩展的过程,因为您必须等待用户告诉您密码是什么,但它确实有效。
(注意:七年后,哦,希望有人会发现它有用)
目前还不可能将密码的哈希值放入算法中,然后以纯文本的形式返回密码,因为哈希是单向的。但人们所做的是生成散列并将其存储在一个大表中,这样当你输入一个特定的散列时,它会在表中检查与散列匹配的密码并将密码返回给你。这样做的站点的一个例子是http://www.md5online.org/。现代密码存储系统通过使用盐腌算法来解决这个问题,这样当你在注册期间在密码框中输入相同的密码时,就会生成不同的哈希值。
不,由于md5是单向哈希函数,在没有发现md5中存在大量漏洞之前,不能解密/反向md5。 另一种方法是有一些网站有大量的密码集数据库,所以你可以尝试在线解码你的MD5或SHA1哈希字符串。 我尝试了网站,比如http://www.mycodemyway.com/encrypt-and-decrypt/md5,它对我来说工作得很好,但这完全取决于你的哈希,如果哈希存储在那个数据库中,那么你可以得到实际的字符串
不,不可能反转诸如MD5这样的哈希函数:给定输出哈希值,除非已知关于输入消息的足够信息,否则不可能找到输入消息。
解密不是为哈希函数定义的函数;encryption和decryption是密码的函数,比如CBC模式下的AES;哈希函数没有加密或解密。顾名思义,没有反向算法可能。
MD5被设计为加密安全的单向哈希函数。现在很容易为MD5生成冲突—即使输入消息的很大一部分是预先确定的。因此,MD5已被正式破解,MD5不应再被视为加密安全哈希。然而,仍然不可能找到导致哈希值的输入消息:当只有H(X)是已知的(并且X没有至少一个128字节的预计算数据块的预计算结构)时,找到X。针对MD5有没有已知的预图像攻击。
通常也可以使用暴力或(增强的)字典攻击来猜测密码,比较数据库或尝试在所谓的彩虹表中找到密码哈希。如果找到匹配项,则在计算上确定已经找到输入。哈希函数对于冲突攻击也是安全的:找到X',从而在给定H(X)时得到H(X') = H(X)。因此,如果找到X,从计算上可以确定它确实是输入消息。否则,您终究会执行碰撞攻击。彩虹表可以用来加速攻击,有专门的互联网资源可以帮助您找到给定特定哈希的密码。
X'
H(X)
H(X') = H(X)
X
当然,重新使用哈希值H(X)可以验证在其他系统上生成的密码。接收系统要做的唯一一件事是存储确定性函数F的结果,该函数以H(X)作为输入。当给系统X时,可以重新计算H(X),因此可以比较结果。换句话说,是不是必需的将哈希值解密为密码正确的验证,并且您仍然可以将哈希值存储为不同的值。
F
使用密码散列或PBKDF(基于密码的密钥推导函数)代替MD5是很重要的。这样的函数指定如何将盐与哈希一起使用。这样就不会为相同的密码(来自其他用户或其他数据库)生成相同的散列。由于这个原因,密码哈希也不允许使用彩虹表,只要盐足够大并且正确随机。
密码哈希还包含工作因素(有时使用迭代计算配置),它可以显著减缓试图找到给定盐和哈希值的密码的攻击。这一点很重要,因为包含盐分和哈希值的数据库可能被窃取。最后,密码哈希值也可能是memory-hard,因此需要大量内存来计算哈希值。这使得攻击者无法使用特殊硬件(GPU、ASIC、FPGA等)来加速搜索。密码散列还可以使用其他输入或配置选项,如胡椒或并行化量。
然而,它仍然允许任何人验证给定H(X)的密码,即使H(X)是密码哈希。密码哈希仍然是确定的,所以如果有人知道所有的输入和哈希算法本身,那么X可以用来计算H(X),并且-同样-结果可以进行比较。
常用的密码散列有bcrypt、scrypt和PBKDF2。还有各种形式的Argon2,它是最近密码哈希竞争的赢家。这里是CrackStation是一篇很好的关于密码安全的博客文章。
可以使对手无法执行哈希计算来验证密码是否正确。为此,可以使用胡椒作为密码散列的输入。或者,哈希值当然可以使用AES等密码和CBC或GCM等操作模式进行加密。然而,这需要秘密/密钥的存储独立,并具有比密码哈希更高的访问要求。
MD5是一个加密(单向)哈希函数,因此没有直接的方法来解码它。加密哈希函数的全部目的就是你不能撤销它。
您可以做的一件事是使用蛮力策略,即猜测哈希了什么,然后使用相同的函数哈希它,看看它是否匹配。除非散列数据非常容易猜测,否则可能需要很长时间。