Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hash 可以解密MD5哈希吗?_Hash_Cryptography_Md5_Encryption - Fatal编程技术网

Hash 可以解密MD5哈希吗?

Hash 可以解密MD5哈希吗?,hash,cryptography,md5,encryption,Hash,Cryptography,Md5,Encryption,有人告诉我,他看到的软件系统: 从其他系统检索MD5加密密码 解密加密的密码和密码 使用系统自己的算法将密码存储在系统的数据库中 可能吗?我认为解密MD5哈希是不可能/不可行的 我知道有MD5字典,但有实际的解密算法吗?没有。MD5不是加密(尽管它可能被用作某些加密算法的一部分),它是一种单向加密。在转换过程中,许多原始数据实际上“丢失” 想想看:MD5的长度总是128位。这意味着有2128个可能的MD5哈希。这是一个相当大的数字,但绝对是有限的。然而,一个给定的散列函数有无限多个可能的输入(其

有人告诉我,他看到的软件系统:

  • 从其他系统检索MD5加密密码
  • 解密加密的密码和密码
  • 使用系统自己的算法将密码存储在系统的数据库中
  • 可能吗?我认为解密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是用于密码的错误哈希:

    • 它的速度很快,这意味着如果你有一个“目标”散列,那么尝试大量密码,看看你是否能找到一个散列到该目标的密码是很便宜的。Salting对这种情况没有帮助,但它有助于提高查找与使用不同salt的多个哈希中的任何一个匹配的密码的成本
    • 我相信它有一些已知的缺陷,这些缺陷使得查找冲突变得更容易,尽管在可打印文本(而不是任意二进制数据)中查找冲突至少会更难
    我不是一个安全专家,所以除了“不要使用自己的认证系统”之外,我不会提出具体的建议。从一个有信誉的供应商那里找到一个,并使用它。设计和实现