2024-04-25 09:35:55 发布
网友
不,MD5不是加密(尽管它可以作为某些加密算法的一部分使用),它是单向的hash function。作为转换的一部分,许多原始数据实际上是“丢失”的。
想想看:MD5总是128位长。这意味着有2个128可能的MD5散列。这是一个相当大的数字,但它绝对是有限的。然而,对于给定的散列函数,可能有无限多的输入(其中大多数包含超过128位,或者只有16个字节)。因此,实际上有无限多的可能,数据将哈希到相同的值。使散列有趣的是,很难找到两个散列到相同值的数据片段,而且意外发生的几率几乎为0。
对于(非常不安全的)散列函数(这说明了它是单向的一般概念),一个简单的例子是获取一段数据的所有位,并将其视为一个大数。接下来,使用一些大(可能是素数)数进行整数除法,并取余数(请参见:Modulus)。您将留下0到n之间的数字。如果您要使用完全相同的字符串再次执行相同的计算(任何时间、任何计算机、任何位置),它将得到相同的值。然而,没有办法找出原始值是什么,因为当除以n时,有无限多的数字具有确切的余数。
也就是说,MD5已经被发现有一些弱点,例如,在一些复杂的数学中,不尝试2128可能的输入字符串就可能找到冲突。事实上,大多数密码都很短,人们经常使用普通值(如“password”或“secret”),这意味着在某些情况下,你可以通过搜索散列或使用Rainbow table对某人的密码进行合理的猜测。这就是为什么您应该始终使用“salt”哈希密码,以便两个相同的值在哈希时不会哈希到相同的值的原因之一。
一旦一段数据通过散列函数运行,就没有回头路了。
理论上你不能。散列的全部意义在于它只是一种方式。这意味着,如果有人设法获得散列列表,他们仍然无法获得您的密码。另外,这意味着即使有人在多个站点上使用相同的密码(是的,我们都知道我们不应该这样做,但是…),任何可以访问站点A数据库的人都不能在站点B上使用用户的密码
MD5是一个散列也意味着它会丢失信息。对于任何给定的MD5散列,如果允许任意长度的密码,则可能有多个密码产生相同的散列。对于一个好的散列,在计算上不可能找到超过非常小的最大长度的密码,但这意味着没有保证如果找到一个具有目标散列的密码,它肯定是原始密码。从天文角度来看,你不太可能看到两个只有ASCII的、长度合理的密码,它们有相同的MD5散列,但这并非不可能。
MD5是用于密码的错误哈希:
我不是安全专家,所以除了“不要使用自己的身份验证系统”之外,我不会给出具体的建议。从一个信誉良好的供应商那里找到一个,然后使用它。安全系统的设计和实现都是一项棘手的工作。
从技术上讲,这是“可能的”,但在非常严格的条件下(rainbow tables,基于用户密码在散列数据库中的可能性非常小的暴力强制)。
但这并不意味着
您不想“反转”一个MD5哈希。使用下面列出的方法,您永远不需要这样做逆转“MD5”实际上被认为是恶意的-一些网站提供了“破解”和强制执行MD5哈希的能力-但它们都是包含字典单词、以前提交的密码和其他单词的海量数据库。有一个很小的机会,它将有MD5哈希你需要逆转。如果你有saltedMD5哈希-这也行不通!:)
使用MD5散列登录的工作方式是:注册期间: 用户创建密码->;密码使用存储在数据库中的MD5->;哈希进行哈希运算
登录时: 用户输入用户名和密码->;(用户名已选中)使用MD5对密码进行散列->;将散列与数据库中存储的散列进行比较
需要“丢失密码”时:2个选项:
或
不,MD5不是加密(尽管它可以作为某些加密算法的一部分使用),它是单向的hash function。作为转换的一部分,许多原始数据实际上是“丢失”的。
想想看:MD5总是128位长。这意味着有2个128可能的MD5散列。这是一个相当大的数字,但它绝对是有限的。然而,对于给定的散列函数,可能有无限多的输入(其中大多数包含超过128位,或者只有16个字节)。因此,实际上有无限多的可能,数据将哈希到相同的值。使散列有趣的是,很难找到两个散列到相同值的数据片段,而且意外发生的几率几乎为0。
对于(非常不安全的)散列函数(这说明了它是单向的一般概念),一个简单的例子是获取一段数据的所有位,并将其视为一个大数。接下来,使用一些大(可能是素数)数进行整数除法,并取余数(请参见:Modulus)。您将留下0到n之间的数字。如果您要使用完全相同的字符串再次执行相同的计算(任何时间、任何计算机、任何位置),它将得到相同的值。然而,没有办法找出原始值是什么,因为当除以n时,有无限多的数字具有确切的余数。
也就是说,MD5已经被发现有一些弱点,例如,在一些复杂的数学中,不尝试2128可能的输入字符串就可能找到冲突。事实上,大多数密码都很短,人们经常使用普通值(如“password”或“secret”),这意味着在某些情况下,你可以通过搜索散列或使用Rainbow table对某人的密码进行合理的猜测。这就是为什么您应该始终使用“salt”哈希密码,以便两个相同的值在哈希时不会哈希到相同的值的原因之一。
一旦一段数据通过散列函数运行,就没有回头路了。
理论上你不能。散列的全部意义在于它只是一种方式。这意味着,如果有人设法获得散列列表,他们仍然无法获得您的密码。另外,这意味着即使有人在多个站点上使用相同的密码(是的,我们都知道我们不应该这样做,但是…),任何可以访问站点A数据库的人都不能在站点B上使用用户的密码
MD5是一个散列也意味着它会丢失信息。对于任何给定的MD5散列,如果允许任意长度的密码,则可能有多个密码产生相同的散列。对于一个好的散列,在计算上不可能找到超过非常小的最大长度的密码,但这意味着没有保证如果找到一个具有目标散列的密码,它肯定是原始密码。从天文角度来看,你不太可能看到两个只有ASCII的、长度合理的密码,它们有相同的MD5散列,但这并非不可能。
MD5是用于密码的错误哈希:
我不是安全专家,所以除了“不要使用自己的身份验证系统”之外,我不会给出具体的建议。从一个信誉良好的供应商那里找到一个,然后使用它。安全系统的设计和实现都是一项棘手的工作。
从技术上讲,这是“可能的”,但在非常严格的条件下(rainbow tables,基于用户密码在散列数据库中的可能性非常小的暴力强制)。
但这并不意味着
或者
您不想“反转”一个MD5哈希。使用下面列出的方法,您永远不需要这样做逆转“MD5”实际上被认为是恶意的-一些网站提供了“破解”和强制执行MD5哈希的能力-但它们都是包含字典单词、以前提交的密码和其他单词的海量数据库。有一个很小的机会,它将有MD5哈希你需要逆转。如果你有saltedMD5哈希-这也行不通!:)
使用MD5散列登录的工作方式是:
注册期间:
用户创建密码->;密码使用存储在数据库中的MD5->;哈希进行哈希运算
登录时:
用户输入用户名和密码->;(用户名已选中)使用MD5对密码进行散列->;将散列与数据库中存储的散列进行比较
需要“丢失密码”时:
2个选项:
或
相关问题 更多 >
编程相关推荐