Hash Function 哈希函数
产生不可解密代码的算法。任意输入 → 定长输出,而且(理想情况下)不能从输出反推输入。
三个核心性质
- 确定性 —— 同样输入永远给同样输出
- 单向性 —— 给你 hash 值,算不出原文
- 抗碰撞 —— 几乎不可能造两个不同输入算出同一个 hash(见 hash collision)
和 encryption 的区别
| Hash | Encryption | |
|---|---|---|
| 可逆 | 否 | 是 |
| 输出长度 | 固定 | 通常和输入相关 |
| 用途 | 验证、指纹 | 保密 |
加密是”我要让别人(凭密钥)看回原文”,hash 是”我永远不需要看回原文,只想验证两个东西一样不一样”。
常见用途
- 存密码 —— 数据库存 hash(配合 salting),不存明文
- 文件完整性 —— 下载后比对 SHA-256
- 数字签名 —— 先 hash 再签,签短的
- 区块链 —— 区块连接、工作量证明
- 去重 —— Git commit ID、网盘秒传
常见算法
SHA-256 / SHA-3 / BLAKE3 用,MD5 / SHA-1 别用(已破)。存密码额外用 bcrypt / Argon2 / scrypt——它们故意算得慢,抗暴力破解。