你有没有想过,当你登录一个网站时,网站是怎么“记住”你的密码的?它会把你的密码原文存下来吗?当然不会——那太危险了。一旦数据库泄露,所有用户的密码就全裸奔了。那么,网站到底存了什么?
答案是:它存的不是你密码本身,而是你密码的哈希值。
哈希函数是密码学中一个神奇的工具。它可以把任意长度的数据(比如一段文字、一张图片、一部电影)压缩成一段固定长度的、看似随机的字符串,就像给数据提取了一段独一无二的“DNA”。这个DNA有几个神奇的特性:
- 不可逆:从哈希值无法倒推出原始数据。就像你无法从一个人的指纹反推出他的长相。
- 唯一性:理想情况下,不同的数据会产生不同的哈希值。哪怕只改变一个标点符号,整个哈希值都会变得面目全非。
- 固定长度:无论输入是“123”还是整部《战争与和平》,输出的哈希值长度都一样。
这些特性让哈希函数成了数字世界的“指纹识别器”。它不负责隐藏数据(那是加密的事),而是负责校验数据的完整性和验证身份的真实性。
哈希函数无处不在:你每次登录网站,系统都会把你输入的密码哈希后与数据库中的哈希比对;你下载一个大文件时,网站会提供一个哈希值,让你验证文件是否损坏或被篡改;区块链用哈希把一个个区块链接成一条不可篡改的链条;数字签名中也依赖哈希来缩短签名长度……
但哈希函数也不是一成不变的。早期的MD5和SHA-1曾经风光无限,后来却被发现存在致命漏洞——碰撞攻击,即找到两个不同数据却产生相同哈希值。于是,更安全的SHA-2和SHA-3接过了接力棒。
在这一章,我们将从哈希函数的“不可逆”本质出发,看看它是如何成为数据完整性的守护者的。你会了解:
- 7.1 哈希函数是什么:用最简单的语言解释哈希的核心概念。
- 7.2 MD5与SHA家族:从MD5的辉煌到崩塌,再到SHA家族的演进,感受密码学与攻击者的赛跑。
- 7.3 你每天都在用:密码存储、文件校验、数字签名……看看哈希如何渗透到数字生活的每个角落。
- 7.4 哈希 vs 加密:一张表让你彻底分清这两个常被混淆的概念。
准备好了吗?让我们从“数据的DNA”开始,揭开哈希函数的神秘面纱。