是否可以解密MD5哈希?


260

有人告诉我,他看到过以下软件系统:

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

那可能吗?我认为解密MD5散列是不可能/不可行的。

我知道有MD5词典,但是有实际的解密算法吗?


7
还原MD5也会产生多个密码。
卡尔斯公司

231
MD5是摘要算法。可以把它想象成将牛变成牛排。现在尝试扭转这种情况。
机械蜗牛

5
根据我的理解,@ Arst是的,但前提是您有很多。即使这样做,您也将无法反向操作,因为该算法有目的地丢失了信息。
约旦

8
以此类推,@ mechanicalsnail可以从牛排上的DNA克隆出一个完整的克隆。:))
Trimikha Valentius 2015年

8
@TrimikhaValentius MD5是一种消化算法。可以将其视为吃牛排>消化>输出。现在尝试扭转这种情况。
user4157124 '17

Answers:


424

不能。MD5不是加密(尽管它可以用作某些加密算法的一部分),但它是一种单向哈希函数。实际上,许多原始数据在转换过程中实际上是“丢失”的。

考虑一下:MD5始终为128位长。这意味着有2 128个可能的MD5哈希。这是一个相当大的数字,但绝对是有限的。但是,给定散列函数有无限数量的可能输入(其中大多数包含超过128位,或仅16个字节)。因此,对于散列为相同值的数据来说,实际上存在无限数量的可能性。使哈希变得有趣的是,很难找到两个哈希值相同的数据,而且偶然发生的几率几乎为零。

一个(非常不安全的)哈希函数的简单示例(这说明了它是单向的),就是将一条数据的所有位都当作一个大数对待。接下来,使用一些大的(可能是素数)n执行整数除法,然后取余数(请参阅:模数)。您将剩下0到n之间的某个数字。如果您要使用完全相同的字符串再次(在任何时间,在任何计算机上,任何地方)再次执行相同的计算,它将得出相同的值。然而,有没有办法找出原来的值,因为有一些有确切的数字剩余,当除以无限数量的ñ

也就是说,已经发现MD5有一些弱点,以至于通过一些复杂的数学运算,无需尝试2128个可能的输入字符串就可以找到冲突。而且大多数密码都很短,而且人们经常使用通用值(例如“ password”或“ secret”),这意味着在某些情况下,您可以通过谷歌搜索哈希或使用Rainbow来合理地猜测某人的密码。这就是为什么您应始终“ 加盐 ”散列密码的原因之一,以便使两个相同的值在散列时不会散列为相同的值。

一旦通过散列函数运行了一条数据,便无法返回。


22
但是,在MD5哈希空间中发生的冲突比原先想象的要多。它不再被认为是最佳的密码哈希。
Cheeso

12
由于大多数密码都比MD5哈希短,因此每个哈希通常只有一个密码。(并且找到一个,即使它不是原始的,也足以访问该帐户。)作为单向功能的要点是没有多个不同的原像,因此我们无法知道哪个是原像。但是,即使找到一个原始值,也确实很难
圣保罗Ebermann

2
@Nick:实际上,RFC1321明确表示:“该算法将任意长度的消息作为输入”
Adam Batkin 2011年

6
@Olathe-我不确定我是否同意。给定哈希值,通常不可能(100%确定)确定原始输入。(通常)有无限数量的输入会产生每种可能的(散列)输出。我之所以这么说因为,如果您知道(例如)您要查找的是ASCII字符串,并且该字符串小于12个字节,则很可能只有一个输入会产生给定的输出。但是总会有碰撞(无限),并且除非您有一些外部约束(例如在我的示例中),否则您永远不会知道哪个是正确的
Adam Batkin

2
@亚当·巴特金(Adam Batkin),您是对的,但我并不是说100%的确定性。密码破解无法100%确定。发件人可能使用与解密其他英语纯文本相同的密钥来表示乱码,而不是英语纯文本,但是英语的概率非常接近100%。同样,在较长的UTF-8日语诗歌密码和乱码之间进行选择时,诗歌的可能性接近100%。这可以使用事后概率而不是预先选择的约束来完成。显然,这通常无法完成,但是仍然非常有用。
Olathe 2013年

154

从理论上讲,你不能。哈希的全部意义在于,它只是一种方式。这意味着,如果有人设法获取哈希列表,那么他们仍然无法获取您的密码。此外,这意味着即使有人在多个站点上使用相同的密码(是的,我们都知道不应该,但是...)有权访问站点A的数据库的任何人都将无法在该站点上使用用户的密码。网站B。

MD5是散列的事实也意味着它会丢失信息。对于任何给定的MD5哈希,如果允许任意长度的密码,则可能会有多个密码产生相同的哈希。对于一个好的哈希,要在一个很小的最大长度范围内找到它们,在计算上是不可行的,但这意味着无法保证,如果您找到具有目标哈希的密码,那肯定是原始密码。从天文学角度来看,您不可能看到两个具有相同MD5哈希值的仅ASCII,合理长度的密码,但这并非不可能。

MD5是用于密码的错误哈希:

  • 它的速度很快,这意味着如果您有“目标”哈希,尝试许多密码并查看是否可以找到针对该目标的哈希值很便宜。在这种情况下,加盐无济于事,但尝试使用不同的盐来查找与多个散列中的任何一个匹配的密码,将使其变得昂贵。
  • 我相信它具有已知的缺陷,可以使查找冲突更容易,尽管在可打印文本(而不是任意的二进制数据)中查找冲突至少会更困难。

我不是安全专家,因此除了“不要推出自己的身份验证系统”之外,不会提出具体建议。从信誉良好的供应商那里找到一个,然后使用它。安全系统的设计和实施都是一项艰巨的任务。


2
是的,还有其他方法,但是您需要了解Jon上面所说的内容-“您不应该通过电子邮件将其密码发送给他们-这是敏感信息,可能会保持敏感。” -在最低级别,可以拦截电子邮件并检索敏感信息。密码应尽可能保持安全-通常通过仅在数据库中将其保留为哈希值来实现。
丹尼尔(Daniel)2009年

3
还有一个事实,即如果密码可以逆转,则意味着任何有权访问您数据库的人都可以获取用户的密码。这不是一个好主意。密码应该是一种规范。仅在绝对必要时(例如,使用没有任何基于令牌的其他系统进行身份验证),才保留真实密码(甚至加密)。
乔恩·斯基特

1
我已经看到了反垃圾邮件措施,接收者的Web服务器拒绝接收的邮件只是为了等待发送者的邮件服务器重试(垃圾邮件程序通常仅尝试一次)。那很容易超过您的10分钟超时。
sisve

1
@ravisoni:这是寻找一个具有相同的哈希值,通过蛮力或查找表大概值。不能保证它是原始的纯文本值。
乔恩·斯基特

5
@ravisoni:这里的“正确”是什么意思?如果密码未知,您将无法知道所显示的密码是否是原始密码。但问题的关键在于,像MD5这样的散列方法从定义上讲会丢失信息。像这样的网站能拿出事实一个匹配的密码就是好MD5是一个坏的算法用出于安全原因的证据。
乔恩·斯基特

52

从技术上讲,它是“可能的”,但是在非常严格的条件下彩虹表,基于用户密码在该哈希数据库中的可能性很小的暴力破解)。

但这并不意味着

  • 可行
  • 安全

您不想“反向” MD5哈希。使用下面概述的方法,您将永远不需要。“反向” MD5实际上被认为是恶意的 -一些网站提供了“破解”和蛮力MD5哈希的功能-但是它们都是庞大的数据库,其中包含字典词,先前提交的密码和其他词。有一个非常小的机会,这将有你需要扭转的MD5哈希值。如果你已经腌制的MD5哈希-这将不能工作!:)


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

注册期间:
用户创建密码->使用MD5哈希密码->存储在数据库中的哈希

登录期间:
用户输入用户名和密码->(已检查用户名)使用MD5对密码进行哈希处理->将哈希与数据库中存储的哈希进行比较

需要“丢失密码”时:

2个选项:

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

要么

  • 系统会向用户发送一个更改密码的链接(需要额外检查是否有安全问题等),然后对新密码进行哈希处理,并用数据库中的旧密码替换

1
我有一些挑剔的人。彩虹桌不是强行强迫的。实际上,有一些程序和站点会使用暴力(非常简单)几个字符的密码(通常它们会循环几个小时或几天,您可以填写一个哈希值并希望它出现在循环中)。不幸的是,由于缺乏许多密码的质量,一个弹出窗口的机会并不是“很小的机会”。
Maarten Bodewes

32

不直接。由于信鸽原理,对任何给定的MD5输出有(可能)多个哈希值。因此,您无法确定地将其撤消。而且,使用MD5很难找到任何这样的反向哈希(但是,曾经发生过会产生冲突的攻击-也就是说,生成的两个值会哈希到相同的结果,但是您无法控制得到的MD5值将是什么是)。

但是,如果将搜索空间限制为例如长度小于N的普通密码,则可能不再具有不可逆性属性(因为MD5输出的数量远大于目标域中的字符串数量)。然后,您可以使用彩虹表或类似来反向散列。


1
我会补充说,找到另一个散列到相同输出的值称为“冲突”。这是破坏MD5哈希系统的最常用方法。
妮可

5
@Renesis,发现数据散列为先前已知的值被称为“原像”,实际上,它是多,多少困难不仅仅是一个碰撞。尚无针对MD5的原像攻击的证明,但已使用冲突攻击。
bdonlan

哈希函数(当用于密码存储时)的重点并不是要提供相同的哈希(有很多密码,但大多数都比哈希本身更长),但是很难找到甚至是相同的哈希其中之一(足以访问系统)。是的,由于彩虹桌子,您不会使用未加盐的哈希。而且由于密码空间较小,您将使用慢速哈希(例如bcrypt或scrypt)而不是快速哈希(例如MD5 / SHA-* / ...)
PaŭloEbermann 2011年

1
从技术上讲,您不能确定要执行MD5,因为硬件可能发生了故障。以同样的方式,您可能无法确定密码是否是密码,password而不是所有其他产生相同散列但看起来非常随机的无限输入,但您可以保证足够接近。
Olathe

信鸽原理当然适用,但是找到散列为某个值的第二个输入(例如,普通密码上的散列)在计算上仍然是不可行的。如果找到哈希到给定H(X)的X,则可以确定X是正确的输入。这使得该答案的整个第一部分以及其余大部分都不正确。
Maarten Bodewes

13

不可能,至少没有在合理的时间内。

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


5
如果哈希没有加盐,您会惊讶的是,谷歌搜索哈希值的频率是多少...
Michael Borgwardt

1
不过,对于密码检索系统来说,它并不实际,即使是未加盐的系统也是如此:)
Matthew Groves

12

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

但是你可以:

给用户一个新的。

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


1
消除彩虹表的想法。如果您正在撒盐-应该撒盐-那就不管用了。
Steven Sudit

1
@StevenSudit如果他们仍然使用MD5来哈希密码而不是使用强密码哈希,那么您不能假定他们使用的是salt。也许他们这样做,也许他们没有。
Maarten Bodewes

10

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

加密散列(MD5等)是一种方法除非您有其他关于原始消息等的信息,否则您不能仅使用摘要就返回原始消息。


8

解密(以算法方式直接从散列值获取纯文本),否。

但是,有些方法使用所谓的Rainbow table。如果您的密码是不加盐的哈希,这是非常可行的。



7

没有简单的方法可以做到这一点。首先,这是散列密码的关键。:)

应该能够做的一件事是手动为其设置一个临时密码,然后将其发送给他们。

我很犹豫地提到这一点,因为这是一个坏主意(而且不能保证它能正常工作),但是您可以尝试在milw0rm之类的彩虹表中查找哈希,以查看是否可以通过这种方式恢复旧密码。


6

在这里查看所有其他答案,以了解如何以及为什么它不可逆以及为什么您无论如何都不想。

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

同样,这对于盐渍哈希也不起作用。许多安全专家建议加盐


不正确。如果找到匹配项,则可以确定它将是原始密码。如果不是这种情况,那么在给定任何H(X)的情况下都可能会产生冲突,其中X是消息,而没有由对手确定的预定义结构。即使对于像MD5这样的散列哈希函数,也很难在密码学上安全的哈希函数中找到这样的冲突。
Maarten Bodewes

@MaartenBodewes:“如果找到匹配项,则可以确定它将是原始密码。” 如果我们假设密码的长度不受限制,我看不出来是怎么回事。我会说这是极有可能是原始密码,但它并不具备如此。可能的密码比MD5散列更多的事实意味着必须有两个具有相同散列的密码。仅仅因为发现这样的碰撞在计算上是不可行的,并不意味着它们不存在。还是我误会了你?
乔恩·斯基特

@JonSkeet如果在计算上故意找不到碰撞是不可行的,那么偶然发现碰撞同样不太可能或更糟。由于MD5的输出空间有限和生日问题,您发现碰撞的几率约为2 ^ 64中的1(即输出空间的一半),并且匹配了2 ^ 64的哈希值。而且,这甚至都没有考虑到消息可能需要很小并且具有特定的格式才能被视为密码。大多数密码的熵都大大低于2 ^ 64位。
Maarten Bodewes

1
@MaartenBodewes:但是“天文学上不太可能”和“不可能”之间有很大的区别。IMO,您关于确定它是正确密码的声明过强。这表明没有数学上的确定性。
乔恩·斯基特

您还可以一口气猜出2 ^ 128位AES密钥。这是“极不可能的”。密码学依靠这种可能性。出于所有实际目的,如果您找到输入消息/密码,它将是您所需要的。从理论上说可以找到另一个输入消息是件好事,但是对于StackOverflow上的这个问题无需考虑它。而且Rainbow表仅填充了可能的密码。它们将不会包含足够的数据,甚至不可能发生冲突(它们将在不知不觉中覆盖映射或变得著名)。
Maarten Bodewes

4

就找到散列函数的逆函数而言,无法“还原”散列函数。如前所述,这是具有哈希函数的全部要点。它不应是可逆的,并且应允许快速计算哈希值。因此,查找产生给定哈希值的输入字符串的唯一方法是尝试所有可能的组合。因此,这称为蛮力攻击。

尝试所有可能的组合会花费大量时间,这也是为什么使用哈希值以相对安全的方式存储密码的原因。如果攻击者能够使用内部的所有用户密码访问您的数据库,则无论如何您都会松懈。如果您具有哈希值和(从理论上来说)强密码,那么从攻击者的哈希值中获取密码将变得更加困难。

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


这个答案没有什么大不了,除了哈希函数的速度非常成问题之外,因为大多数密码不够安全,并且允许对手进行字典攻击。因此,使用慢速密码哈希函数代替快速加密安全哈希函数。
Maarten Bodewes

3

MD5被认为是损坏的,不是因为您可以从哈希中获取原始内容,而是因为在工作中,您可以将两条哈希为同一哈希的消息。

您不能取消哈希MD5哈希。


3
通过设计,所有相同长度的哈希都会遭受碰撞。当限制可变长度数据时,这是不可避免的。MD5被认为是过时的碰撞率,而不是碰撞的事实。
2009年

MD5被认为是损坏的,因为已证明构造碰撞输入的可能性。
Ned Batchelder

3

您可以找到使用词典检索原始消息的在线工具。

在某些情况下,dictionary方法可能只是无用的:

  • 如果使用SALT消息对消息进行哈希处理
  • 如果消息被多次散列

例如,这是一个MD5解密程序在线工具。


如果使用盐,则彩虹表(而不是字典攻击)是没有用的。尽管可以在网上找到一个已经存在的表,但不太可能进行多次(不加盐)的哈希表。
Maarten Bodewes

2

唯一可行的方法是(如果我们提到密码只是散列的,而没有添加任何盐类以防止重播攻击,如果是这样,则必须知道盐类),请使用字典攻击工具,则包含许多单词,数字等的文件,然后创建两行,一行是单词,数字(在字典中),另一行是单词的哈希,如果有匹配,则比较哈希...

这是唯一的方法,无需进行密码分析。


2

是的,您所要求的完全可能。在没有帮助的情况下无法“解密” MD5密码,但是有可能将MD5密码重新加密为另一种算法,只是不能一次完成。

您要做的是安排用户使用旧的MD5密码登录到新系统。在他们登录时,他们为您的登录程序提供了一个未加密的密码版本,您证明该密码与您拥有的MD5哈希匹配。然后,您可以将此未哈希的密码转换为新的哈希算法。

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

(注:七年后,希望有人会发现它有用)


谢谢回复。但是,我将“加价”给您:)我不记得我是否确实这样做过,但从理论上讲应该可以。无需等待每个用户登录即可重新加密他们的密码,您只需加密其密码的哈希版本即可。因此,将对每个密码进行MD5哈希处理,然后进行加密。只需更新密码检查以执行相同的操作,并且用户数据应该是安全的,无需用户干预。
约翰·布布里斯基

我在上面的评论还有一个警告。我不是加密专家,所以我不确定是否还有其他安全隐患。例如,对在加密之前经过弱哈希处理的弱密码进行加密可能会危及加密的安全性(也许也使用另一种方法吗?)。另外,您可能会使用这些MD5哈希密码来备份备份。进行此类升级时,最好使所有现有密码完全失效。
约翰·布布里斯基

密码学家担心双重加密,但我认为他们只发现了有问题的小事。但是在这种情况下,我认为它没有用,因为MD5仍然可以安全地使用(不是太长的文本)密码。但是,如果以前的开发人员忘记添加盐,则双哈希运算可能会很有用,否则,我想不出您不必告诉所有人应该考虑使用密码的情况。希望您的备份不会丢失,并且还是经过加密的。
user3710044'9

1

不,这无法完成。您既可以使用字典,也可以尝试对不同的值进行哈希处理,直到获得所需的哈希值为止。但是它不能被“解密”。


我看到这个网站将md5反向转换为原始文本:md5.gromweb.com。那怎么可能呢?
samach

2
@ samach321-简单:他们有一个散列字符串数据库。无论您在他们的“将字符串转换为MD5哈希”框中输入什么,都将添加到数据库中。尝试从另一个来源获取MD5哈希值,然后输入该值。除非这是他们数据库中的内容,否则您将不会获得结果。
Vilx- 2015年

1

MD5有其弱点(请参阅Wikipedia),因此有些项目试图预计算哈希值。维基百科也暗示了其中一些项目。我知道(和尊重)的一个是反抗。您不能告诉用户他们自己的密码,但是您可以告诉他们有效的密码。但是我认为:只要给他们发送新密码以防万一他们忘记了。


MD5已损坏(对于该函数的特定但重要的用途)这一事实与Rainbow表(在提及哈希的预计算时所暗示的)完全无关
Maarten Bodewes


1

从理论上讲,不可能解密散列值,但是您有一些肮脏的技术可以使原始纯文本恢复。

  1. 暴力破解:所有计算机的安全算法遭受暴力破解。基于这种想法,当今的GPU采用了并行编程的思想,通过这种思想,它可以通过使用任何图形处理器对它进行大量暴力破解来获取纯文本。该工具hashcat可以完成这项工作。上次我检查它的cuda版本时,能够在六分钟内强行破解一个7个字母长的字符。
  2. 互联网搜索:只需将哈希复制并粘贴到Google上,看看是否可以在其中找到相应的纯文本。当您进行某些测试时,这不是解决方案,但是绝对值得一试。一些网站会维护字典中几乎所有单词的哈希值。

2
字典攻击是另一种方式,或者与您知道其输入密码的其他数据库进行比较。
Maarten Bodewes

1

不,不可能反转诸如MD5之类的哈希函数:给定输出哈希值,除非知道有关输入消息的足够信息,否则不可能找到输入消息。

解密不是为哈希函数定义的函数。加密和解密是密码的功能,例如CBC模式下的AES;哈希函数既不加密也不解密哈希函数用于摘要输入消息。顾名思义,设计没有反向算法。


MD5被设计为一种加密安全的单向哈希函数。现在,即使大部分输入消息是预先确定的,也很容易为MD5生成冲突。因此,MD5正式被破解,MD5不应再被视为加密安全的哈希。但是,仍然不可能找到导致哈希值的输入消息:只有H(X)已知时才能找到X(并且X不具有带有至少一个128字节预计算数据块的预计算结构)。 。有没有已知的图像前的攻击针对MD5。

通常还可以使用蛮力或(增强的)字典攻击来猜测密码,比较数据库或尝试在所谓的Rainbow表中查找密码哈希。如果找到匹配项,则在计算上可以确定已找到输入。散列函数也很安全,可以抵御碰撞攻击:找到X',然后H(X') = H(X)再给定H(X)。因此,如果X找到,则可以通过计算确定它确实是输入消息。否则,您毕竟会进行碰撞攻击。Rainbow表可用于加快攻击速度,并且那里有专门的Internet资源,可以帮助您在给定特定哈希的情况下找到密码。

当然,可以重新使用哈希值H(X)来验证在其他系统上生成的密码。接收系统需要做的唯一一件事就是存储确定性函数的结果,F这需要H(X)作为输入。当X被提供给系统随后H(X),因此F可以重新计算,然后对结果进行比较。换句话说,不需要仅仅为了验证密码正确就对哈希值进行解密,您仍然可以将哈希存储为其他值。


代替MD5,重要的是使用密码哈希或PBKDF(基于密码的密钥派生功能)。这样的函数指定如何将与哈希一起使用。这样,就不会为相同的密码(从其他用户或在其他数据库中)生成相同的哈希。由于这个原因,密码哈希也不允许使用彩虹表,只要盐足够大且可以适当地随机分配。

密码哈希还包含一个工作因子(有时使用迭代计数进行配置),可以显着减慢尝试在给定salt和hash值的情况下查找密码的攻击。这很重要,因为带有盐和哈希值的数据库可能会被盗。最后,密码哈希也可能难以存储,因此需要大量内存来计算哈希。这使得不可能使用特殊的硬件(GPU,ASIC,FPGA等)来使攻击者加快搜索速度。其他输入或配置选项(例如Pepper或并行化量)也可用于密码哈希。

但是,H(X)即使H(X)是密码哈希,它仍然允许任何人验证给出的密码。密码哈希仍然是确定性的,因此,如果有人知道所有输入,并且X可以使用哈希算法本身进行计算,H(X)并且可以再次比较结果。

常用的密码哈希是bcryptscryptPBKDF2。还有各种形式的Argon2,它是最近相当合理的密码哈希竞赛的获胜者。在CrackStation上,这是一篇有关做好密码安全性的不错的博客文章。


可能使对手无法执行哈希计算,以验证密码是否正确。为此,可以将Pepper用作密码哈希的输入。或者,当然可以使用诸如AES之类的密码和诸如CBC或GCM之类的操作模式来加密散列值。但是,这需要独立存储秘密/密钥,并且具有比密码哈希更高的访问要求。


0

MD5是一种加密(单向)哈希函数,因此没有直接的方法对其进行解码。加密哈希函数的全部目的是您不能撤消它。

您可以做的一件事是蛮力策略,您可以在其中猜测要进行哈希处理的内容,然后使用相同的函数对其进行哈希处理,看看是否匹配。除非很容易猜测散列数据,否则可能要花很长时间。


-1

由于散列是一种方式,因此尚不可能将密码的散列放入算法中并以纯文本形式取回密码。但是人们所做的就是生成哈希并将其存储在一个大表中,这样当您输入特定的哈希时,它将检查表中是否有与哈希匹配的密码并将该密码返回给您。http://www.md5online.org/就是这样做的网站示例 。现代的密码存​​储系统通过使用一种加盐算法来对此进行反击,以便在注册期间在密码框中输入相同的密码时,会生成不同的哈希。


-1

不,您不能解密/反向md5,因为它是一种单向哈希函数,直到您在MD5中找不到广泛的漏洞为止。另一种方法是,有些网站拥有大量的密码数据库集,因此您可以尝试在线解码MD5或SHA1哈希字符串。我尝试了一个像http://www.mycodemyway.com/encrypt-and-decrypt/md5网站,它对我来说很好用,但这完全取决于您的哈希,如果该哈希存储在该数据库中,则可以获取实际的字符串。


1
不,MD5不是加密,甚至不是单向加密(首先没有意义)。
Maarten Bodewes

@MaartenBodewes这是我的错误,它不是加密函数,而是哈希函数谢谢。
拉菲·艾哈迈德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.