什么是哈希值?
哈希(摘要)算法把任意长度的数据压缩成固定长度的一串字符。它有这几个特性:同样的输入永远得到同样的输出;输入改一个字节,输出会完全不同;无法从输出反推输入。
各算法对比
- SHA-1:160 bit(40 位十六进制),已被证实可碰撞,不再用于安全场景,仅用于兼容性校验。
- SHA-256:256 bit(64 位十六进制),目前最通用,TLS 证书、区块链、文件校验普遍使用。
- SHA-384 / SHA-512:更长的输出,抗碰撞性更强,适合长期保存的签名场景。
常见用途
- 文件完整性校验:下载安装包后对比官方提供的哈希值,确认文件没被篡改或损坏。
- 去重:用哈希判断两份内容是否完全一致,比逐字节比对快得多。
- 密码存储:服务端只保存密码的哈希(并加盐),即使数据库泄露也无法还原明文。注意应使用 bcrypt、Argon2 等专用慢哈希,不要用 SHA-256 直接存密码。
哈希能保证文件不被篡改吗?
只能保证完整性,不能保证来源可信。攻击者可以同时替换文件和哈希值。要防篡改需要数字签名或 HMAC(带密钥的哈希)。
为什么这里不提供 MD5?
MD5 已被完全攻破,可以人为制造碰撞,任何安全场景都不应再使用。需要兼容老系统的话,请确认对方系统确实强制要求 MD5。