关于 Hash

Hash 不是加密(Encryption),不像 加密(Encrypt)-解密(decrypt)对一个对象进行 Hash 操作后,不可能通过 Hash 后的值 dehash 回原来的对象

Hash 算法需要 Collision Free ,即对两个完全不同的输入,经过 Hash 算法后的值也必须 不同

在 Linux 系统中,用户名秘密验证就是使用 Hash 算法。/etc/shadow 中包含的是用户密码(加 Salt) Hash 后的值,而不是用户密码,当用户使用密码登陆系统时,会计算用户密码(加 Salt)的 Hash 值并和 /etc/shadow 中保存的内容进行对比以验证用户密码是否正确。

Hash 在 Linux 系统中,有以下用途:

  • Passwords 验证
  • 校验文件内容
  • 数字签名
  • 病毒签名

Hash 也有以下叫法:

  • Message Digest : 消息摘要,Linux 中常用的命令如 md5sumsha1sumsha224sumsha256sumsha384sumsha512sumshasum 等应用了不同的 Hash 算法
  • Checksum : 校验和
  • Fingerprint : 数字指纹
  • Signature : 签名

Hash 常见用途示例

内容完整性校验

例如网上公开的 ISO 系统镜像,发布者会同时发布镜像的 SHA-256 Hash 算法摘要值,当你下载了此镜像后,可以在本地对其镜像同样的 Hash 计算(如 sha256sum 命令),如果计算出的值和发布者公布的值一致,说明其内容和发布者发布的镜像内容一致(未被篡改)

$ sha256sum Fedora-Workstation-Live-x86_64-30-1.2.iso
a4e2c49368860887f1cc1166b0613232d4d5de6b46f29c9756bc7cfd5e13f39f
Fedora-Workstation-Live-x86_64-30-1.2.iso