SHA
SHA(Secure Hash Algorithm,安全散列算法)是一组由 NSA 设计、NIST 发布的密码学哈希函数。它把任意长度的输入压缩成固定长度的摘要(digest)。日常说的 SHA256、SHA512 都属于 SHA-2 家族,SHA-1 是更早一代,SHA-3 则是内部结构完全不同的新标准。名字里的数字通常表示输出位数:SHA-256 输出 256 位(64 个十六进制字符),SHA-512 输出 512 位(128 个字符)。
它有几个关键特性,也决定了它的用途:
- 确定性:同样的输入永远得到同样的摘要,可用来比对。
- 单向性:几乎无法从摘要反推原文。
- 雪崩效应:输入改动一个比特,摘要就面目全非。
- 抗碰撞:很难构造出两段不同数据得到相同摘要。
所以它常见于校验文件完整性、数字签名、HMAC 消息认证、Git 提交 ID、区块链等场景。最常见的误区是把 SHA 当成「加密」——它没有密钥、不可逆,无法「解密」,只能重新计算再比对。另一个坑是直接用 SHA 存密码:SHA 算得太快,容易被暴力破解或彩虹表命中,密码应改用加盐的慢哈希(bcrypt、scrypt、Argon2、PBKDF2)。此外 SHA-1 已被证明可构造碰撞,新项目请用 SHA-256 及以上。
常见问题
SHA256 和 SHA-2 是什么关系?
SHA-2 是一个家族,包含 SHA-224/256/384/512 等成员;SHA256 是其中输出 256 位的那个变体。平时说的「SHA2」多半就是指 SHA-256。
SHA 能解密还原原文吗?
不能。SHA 是单向哈希,不是加密算法,没有可逆过程。所谓「SHA 解密」网站只是把海量常见明文提前算好摘要做字典比对,对随机长字符串基本无效。
该用哪个 SHA?SHA-1 还能用吗?
SHA-1 已被攻破(存在实际碰撞),只适合非安全的一致性校验,别再用于签名或防篡改。新项目默认选 SHA-256,需要更高强度可用 SHA-512 或 SHA-3。