很多开发者还在用MD5存密码,这是非常危险的。SHA256是比MD5更安全的哈希算法,但如果直接使用仍然不够安全。真正的安全实践是SHA256加盐。本文将深入讲解为什么需要加盐,以及如何正确实现。
一、为什么直接SHA256不够安全?
SHA256虽然比MD5更抗碰撞,但仍然是快速哈希算法。攻击者可以预先计算常用密码的SHA256值,建立彩虹表。一旦数据库泄露,通过查表可以快速破解大量密码。常见密码如123456、password、qwerty的SHA256值,网上随便一搜就有。所以直接SHA256并不能有效保护弱密码。
二、什么是加盐?
加盐就是在用户密码后面拼接一段随机字符串,再计算哈希值。这个随机字符串叫做盐。每个用户的盐应该独立随机生成,并和哈希值一起存储在数据库中。验证密码时,取出盐,拼接到用户输入的密码后面,再计算哈希,与存储的哈希比对。即使两个用户密码相同,因为盐不同,哈希值也不同。
三、盐的生成和存储规范
盐应该足够长,推荐16字节以上,用密码学安全的随机数生成器产生。盐不需要加密存储,直接明文和哈希值放一起即可。盐的作用是让彩虹表失效,而不是保密。每个用户使用不同的盐是最佳实践。
四、多次哈希:增加破解成本
除了加盐,还可以多次哈希,比如将SHA256重复执行1000次。这样攻击者破解一个密码也需要计算1000次哈希,成本大幅增加。这就是所谓的密钥派生函数(KDF)的原理。专业的密码哈希算法如bcrypt、Argon2内置了这种机制。
五、使用一页共享测试SHA加密效果
打开一页共享的SHA加密工具,输入你的测试密码,选择SHA256,得到哈希值。然后模拟加盐:在密码后面加上随机字符串,再计算哈希,观察结果变化。支持批量处理,方便对比不同盐的效果。

