哈希算法(Hash Algorithm)是一种将任意长度的数据映射为固定长度字符串的函数。哈希值具有以下重要特性:
哈希算法在计算机科学中有着广泛的应用,包括:
ed076287532e86365e841e92bfc50d8c
消息摘要算法第5版,由Ron Rivest于1991年设计,生成128位哈希值。
特点:
安全性: 低
输出长度: 128位 (32个十六进制字符)
d41d8cd98f00b204e9800998ecf8427e
安全哈希算法1,由美国国家安全局设计,生成160位哈希值。
特点:
安全性: 低
输出长度: 160位 (40个十六进制字符)
da39a3ee5e6b4b0d3255bfef95601890afd80709
SHA-2家族成员,生成256位哈希值,目前应用最广泛的哈希算法之一。
特点:
安全性: 高
输出长度: 256位 (64个十六进制字符)
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Keccak算法,2015年发布的最新SHA标准,采用海绵结构设计。
特点:
安全性: 高
输出长度: 可配置 (通常256或512位)
a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a
高性能哈希算法,比MD5、SHA-1、SHA-2和SHA-3更快,同时保持高度安全性。
特点:
安全性: 高
输出长度: 可配置 (1到64字节)
256c83b297114d201b30179f3f0ef0cace9783622da5974326b436178aeef610
| 算法 | 输出长度 | 安全性 | 速度 | 抗碰撞性 | 主要应用 |
|---|---|---|---|---|---|
| MD5 | 128位 | 低 (已破解) | 非常快 | 弱 | 文件校验,非安全场景 |
| SHA-1 | 160位 | 低 (已破解) | 快 | 弱 | 旧版Git,已淘汰 |
| SHA-256 | 256位 | 高 | 中等 | 强 | 区块链,密码存储,数字签名 |
| SHA-3 | 可配置 | 高 | 中等 | 强 | 安全敏感应用,抗量子计算 |
| BLAKE2 | 可配置 | 高 | 非常快 | 强 | 高性能需求,加密货币 |
通过比较文件的哈希值,可以验证文件在传输或存储过程中是否被篡改。
推荐算法: SHA-256, BLAKE2
存储用户密码时,只存储密码的哈希值,即使数据库泄露,攻击者也无法直接获取原始密码。
推荐算法: SHA-256 + 盐值,Argon2, bcrypt (专门用于密码哈希)
区块链使用哈希算法连接区块,确保区块链的不可篡改性。比特币使用SHA-256,以太坊使用Keccak-256。
推荐算法: SHA-256 (比特币), Keccak-256 (以太坊)
数字签名使用哈希算法确保文档的完整性和来源真实性。SSL/TLS证书依赖哈希算法验证网站身份。
推荐算法: SHA-256, SHA-384
MD5和SHA-1都已被证明存在碰撞攻击漏洞,攻击者可以找到两个不同的输入产生相同的哈希值。2004年MD5被证明存在严重碰撞漏洞,2017年Google成功实现了SHA-1的碰撞攻击。因此,它们不再适用于安全敏感的应用场景。
选择哈希算法时需要考虑:
传统哈希算法在量子计算机面前的安全性会降低。Grover算法可以将哈希攻击的复杂度从O(2^n)降低到O(2^(n/2))。因此,面对量子计算威胁,建议使用输出长度更长的哈希算法(如SHA-512)或专门设计抗量子攻击的算法(如SHA-3)。
主要区别:
加盐是在哈希计算前向原始数据添加随机字符串的过程。这可以防止彩虹表攻击(预先计算好的哈希值表)。即使两个用户使用相同密码,由于盐值不同,存储的哈希值也会不同。加盐是密码存储的最佳实践之一。