网工干货知识

超全学习笔记
当前位置:首页 > 干货知识

哈希技术和哈希碰撞现象的基础介绍

更新时间:2026年03月27日   作者:spoto   标签(Tag):

什么是哈希运算呢?
哈希处理是指将任何类型的数据(通常是密码或安装文件)转换为固定长度的字符串的过程。 哈希算法有很多种,但在本文中,我们仅讨论MD5哈希算法。 MD5是一种哈希算法的例子。 例如,字符串“hello”的MD5哈希值(不包括引号)为“5d41402abc4b2a76b9719d911017c592”。 同样地,文章《Geeks for Geeks》的MD5哈希值(去掉引号后)为“5ee878924e0cb782e0729066a7d88832”。 你会发现,尽管“Geeks for Geeks”的篇幅比“hello”更长,但它们的MD5哈希值长度却是相同的。 这就是使得哈希值变得脆弱的原因,这也是我们在本文后面会讨论的内容。

我们为什么要使用哈希函数呢?
哈希值通常有一些常见的应用场景。

  1. 密码安全性
  2. 确保下载内容准确无误
  3. 图像完整性验证

在本文中,我们将从密码安全的角度来探讨哈希技术的作用。因为这正是哈希技术最常见的应用场景。

密码安全性:
很多时候,网站都需要有一个登录表单来验证用户的身份。通常,这些网站拥有大量的用户,因此需要将他们的登录信息存储到某种数据库中。不过,以明文形式存储密码在数据库中是非常不安全的做法。

例如假设有黑客成功侵入了某个网站所存储的登录信息数据库……

用户名

密码

管理员Admin_securep@$$w0rd
johnnyappleseed123ja.5923!
扎迪宾1998年11月15日

从这张表格中,可以清楚地看出每个用户的密码是什么。此外,黑客现在可以访问管理员账户,从而控制网站的多个方面!不过,该网站选择使用MD5哈希值来存储密码。假设黑客成功进入了网站的数据库,那么他们就会看到这样的结果——

用户名密码哈希值
管理员865c5895f347413ca07c81e6c365cb31
JohnnyAppleseed123a55805ec1caef94681bb07271659c887
扎迪宾ae93717757ecfb103847b6752b88ed36

现在,黑客只能看到密码的哈希值而已。从理论上来说,他们无法登录这些账户中的任何一个。 如果没有实际的密码,那么哈希值对于黑客来说也是毫无用处的(至少在理论上如此)。 但现在,网站该如何验证用户的身份呢?与其将用户输入的密码与数据库中的密码进行比对,不如直接检查用户输入的密码的哈希值。 如果该哈希值与数据库中的哈希值匹配,那么用户就通过了认证!因为“Admin_securep@$$w0rd”的MD5哈希值始终为“865c5895f347413ca07c81e6c365cb31”。虽然可以使用密码来生成哈希值,但从哈希值还原出原始密码在理论上是极其困难的。不过,为了简单起见,我们暂时还是使用MD5作为加密方式。
刚才,“理论上”这个词被频繁使用,下面就是其背后的原因。

哈希值破解:
哈希破解的过程就是:先获取一个包含大量单词的列表或字典,然后对每个单词进行哈希处理。接着,将字典中每个单词的哈希值与你要破解的哈希值进行比较。一旦找到匹配项,那么你就找到了正确的单词!因此,不建议使用常见的单词作为密码。
根据上述例子,黑客获得了该网站登录数据库的访问权限。而数据库中的这一行数据,正是用来进行登录验证的。

用户名

密码哈希值

pharrell1575f4dcc3b5aa765d61d8327deb882cf99

因为黑客不会因为密码被哈希处理而放弃攻击,所以他们会利用某种哈希破解工具来破解这些哈希值。这种工具会比对那些非常常见的哈希值来进行判断。其实,只要输入哈希值“5f4dcc3b5aa765d61d8327deb882cf99”,就能成功破解reCAPTCHA,从而获得结果。

crackstation.net 能够破解常见的 MD5 哈希值。

现在,黑客只需使用一款免费的在线工具,就能在几秒钟内得知pharrell157的密码其实只是“password”而已。
这就是MD5哈希算法并不安全的主要原因之一。因为MD5哈希算法是一种无盐哈希算法(与BCrypt不同),所以相同的数据无论在什么情况下,都会得到相同的哈希值。也就是说,对于“password”这个字符串来说,其MD5哈希值永远都是“5f4dcc3b5aa765d61d8327deb882cf99”。
除了单纯的哈希破解问题之外(实际上,所有的哈希值都容易受到这种攻击),MD5还存在另一个严重的问题,使得它的安全性极低。

哈希碰撞:
在世界上,对于任意数量的位来说,存在无限多种可能的组合方式。 因此,可以哈希处理的数据数量几乎是无限的。 请注意,上述关于哈希的定义指出:哈希的值总是具有固定长度。 例如,MD5哈希值的总长度为128位(通常表示为16个十六进制字节)。 因此,可能的MD5哈希值数量为2^128个。 虽然这个数字非常大,但它显然还是有限的…… 虽然可以生成的密码数量几乎是无限的。 这意味着,有无限多种不同的密码,它们所对应的哈希值都是相同的。 这意味着,如果黑客能够获取密码的MD5哈希值,他们并不一定需要找到真正的密码,而只需要找到与那个哈希值相匹配的其他内容即可。 由于技术上的创新,现在在MD5哈希值中找到冲突的情况几乎变得微不足道了。 更多信息请参考Marc Stevens的项目HashClash,或者Corkami在GitHub上的相关项目。

我们可以用什么来代替MD5呢?
幸运的是,由于MD5已经无法提供我们期望的那种安全性了,因此人们创造了许多新的哈希算法来弥补这一不足。 例如,SHA-256算法(又称:) SHA-2的加密强度更高,因为其密钥长度为256位,而SHA-1的密钥长度仅为128位。 现在,大多数网站都使用类似BCrypt这样的“加盐哈希算法”。只要使用不同的盐值或种子值,就可以从同一个密码生成不同的哈希值。 在某些情况下,MD5哈希值仍然可以在数字取证中使用,但大多数情况下,人们已经选择了更安全的替代方案来替代MD5。

              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

免费试听-咨询课程-获取免费资料