
在做了两期加解密系列之后,本章让我们换个话题——“哈希”。
先从“信息技术世界的需求”谈起。
- 当接收方收到一份来自发送方的文件后,如何快速验证文件内容没有丢失、乱序或者被篡改?
- 现实世界里海量的文献如何能被映射成简短而唯一的“索引”,从而方便快速归档和查找?
- 如何做到不把明文密码存储到第三方验证机构,但又可以在第三方安全地验证密码?
- 对于一份电子合同文本来说,如何产生一个消息摘要来确保消息的完整性和真实性?
加解密的方式显然无法满足以上这些需求,这就需要数据安全领域的另一大概念“哈希”出场了。在谈到哈希算法时,书本上给出的定义通常会包括,哈希算法是一种将输入数据转换为固定长度的数字串(哈希值)的数学函数。哈希值是唯一的,即使输入数据微小地变化,哈希值也会截然不同。哈希运算本身不被视为一种加密(Encryption)操作,而是一种散列(Hashing)操作【图-1】。虽然哈希和加密都涉及数据转换,但它们有本质上不同的目标和特性:

哈希(Hashing):
- 目标:哈希算法的主要目标是将输入数据(原文)转换为一个固定长度的哈希值(散列值)【图-2】。
- 特性:哈希算法是单向的,不可逆的,即无法从哈希值还原出原始数据。它旨在生成唯一的哈希值,以便验证数据完整性、生成数据的唯一标识符以及用于快速数据检索等。
- 典型用途:数据完整性验证、数字签名、密码存储、数据索引等。
加密(Encryption):
- 目标:加密算法的主要目标是将原始数据(明文)转换为经过加密的数据(密文),以便保护数据的机密性,只有授权用户可以解密和访问数据。
- 特性:加密算法是可逆的,只有掌握正确的密钥才能解密密文还原为明文。它的目标是提供保密性和隐私保护。
- 典型用途:数据传输加密、文件加密、通信