第 1 课

什么是 Hash

理解单向摘要以及开发中的常见 Hash 场景。

Hash 函数 可以把任意长度的输入数据映射成固定长度的 摘要(digest),通常以十六进制字符串展示。在相同算法下,相同输入总会得到相同摘要;输入哪怕只改一个字符,摘要也往往会完全不同。

Hash 是单向的

你可以从数据计算出 Hash,但不能可靠地从 Hash 反推出原始输入。因此 Hash 适合作为指纹,而不是恢复秘密的手段。

Hash 是确定性的

如果用 SHA-256 对字节 Hello 计算两次,结果会一致。这让 Hash 非常适合做对比:

  • 下载的文件是否与公布的 checksum 一致?
  • 配置文件是否相对昨天发生了变化?
  • 两个 API 载荷是否字节级相同?

开发中常见 Hash 场景

例如:

  • 包管理器 lockfile 的完整性字段
  • Git commit ID(基于 SHA-1,并有 Git 特有格式)
  • HTTP ETag 与缓存键
  • 与正确密钥拉伸结合后的密码存储(绝不是裸 MD5)
  • 区块链与证书指纹(通常使用更强算法)

Hash 检测变化,不证明意图

Hash 只能告诉你:在选定算法下,两段字节是否一致。它不能告诉你数据是谁生成的、是否安全可运行,也不能单独证明第三方是否篡改——除非你已信任参考 Hash 的来源。

想动手练习时,可使用 DevCove 相关工具——可选,不属于本课正文。

打开相关工具

返回课程概览