关于 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 中常用的命令如md5sum
、sha1sum
、sha224sum
、sha256sum
、sha384sum
、sha512sum
、shasum
等应用了不同的 Hash 算法Checksum
: 校验和Fingerprint
: 数字指纹Signature
: 签名
Hash 常见用途示例
内容完整性校验
例如网上公开的 ISO 系统镜像,发布者会同时发布镜像的 SHA-256 Hash 算法摘要值,当你下载了此镜像后,可以在本地对其镜像同样的 Hash 计算(如 sha256sum
命令),如果计算出的值和发布者公布的值一致,说明其内容和发布者发布的镜像内容一致(未被篡改)
sha256sum Fedora-Workstation-Live-x86_64-30-1.2.iso |