This article has been translated from English to Traditional Chinese.
散列的目的是什么?
散列的主要目的是验证数据的完整性。
由于生成的哈希值对于输入数据是唯一的,因此它充当了输入数据的唯一“指纹”。
这使得散列可用于验证通过互联网等不安全通信渠道发送的数据的完整性。数据完整性是指数据未被以未经授权的方式修改。
可以将收到的数据的哈希值与发送前数据的哈希值进行比较,以确定数据是否被篡改。
如果我同时发布消息和从中生成的哈希值,您可以从收到的消息中生成哈希值,然后进行比较。
举个简单的例子,假设我们约好一起吃午饭,在我出门前,我想起我们上次见面时……

虽然你人很好,但身上的味道实在不好闻。 😬
所以我想给你发一条消息:“请涂点除臭剂吧。”
但在发送之前,我通过哈希函数(SHA-256)对其进行了处理。哈希值是:
33ebb528eab107766343d0ac591952bb68ee959d45b7a8b399628e662f3bc1ef
我先发送给您这个散列值。*
然后,我再发送给您实际短信。
收到我的信息后,您会想:“搞什么?他真的对我说了这些吗?还是信息在传输过程中被截获,原始信息被篡改了?”

于是,您用同样的散列函数对信息进行运算。
33ebb528eab107766343d0ac591952bb68ee959d45b7a8b399628e662f3bc1ef
然后,您将散列值与短信之前的散列值进行比较。
如果两个哈希值相同,则证明:
- 信息发送正确。
- 你的腋窝确实很臭!
- 在信息从发送到接收的过程中,没有人故意篡改过它。
当然,在现实世界中,这一切都是由我们的计算机完成的。
希望你能保持腋下清爽。 😅
*严格来说,在发送散列之前,应该以某种方式保护它,但我希望示例简单一些。散列在传输过程中如何保持保护将在后面的课程中介绍。
散列的真实示例:在线密码
这可能会让你感到惊讶,但你可能在日常生活中遇到过散列……当你登录查看电子邮件时。 📧

当您创建电子邮件地址和密码时,您的电子邮件提供商可能不会保存您的真实密码。
相反,您的电子邮件提供商会通过哈希函数运行密码,并保存密码的哈希值。
每次您尝试登录电子邮件账户时,您的电子邮件提供商都会对您输入的密码进行哈希处理,并将其与保存的哈希值进行比较。
只有当两个哈希值匹配时,您才能访问您的电子邮件。
让我们看看为什么他们不保存您的真实密码……
如果存储了真实密码,黑客进入他们的系统后,就可以窃取这些密码。这对于在多个网站上使用相同密码的用户来说绝对不是什么好事!
一种解决方案是对密码进行哈希处理……
通过散列密码,公司可以保护用户信息。即使黑客入侵系统,他们也无法获得实际密码,只能获得散列值。
请记住,散列是不可逆的,因此黑客无法仅通过查看散列来确定实际密码是什么。散列确保数据以加密状态存储,因此更难被窃取。

每次登录时,您的电子邮件提供商都不会存储纯文本密码,他们只需要哈希值即可。
当您输入密码时,密码会通过哈希函数运行。
输出结果与数据库中保存的哈希值进行匹配。
如果哈希值相同,则表明密码正确。
输入错误的密码会产生与保存的哈希值不同的结果。哈希值将无法匹配,因此您的登录尝试将失败。
如您所见,散列函数会破坏数据,使其无法读取。即使黑客成功访问您的电子邮件提供商的服务器,也无法解密存储的详细信息。


