V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  littlez0325  ›  全部回复第 1 页 / 共 1 页
回复总数  2
本质是防止原始密码被人知道,不用可逆加密算法,而是用不可逆摘要算法

直接把用户输入的密码按照一定的规则生成一个 salt(比如把密码的字符每 n 个字符删除一个,然后用 md5 或其他算法生成一个摘要值作为原始密码的 salt),然后 PBKDF2 算法生成一个摘要值传给服务端,服务端无法知道原始密码,也不需要知道,直接用传过来的摘要串做后面的逻辑(用加盐摘要算法生成摘要串落库/前面的方式对前端传过来的摘要串操作后和库里的对比是否密码正确)

1.密码强度验证逻辑没必要放在服务端,不会有人要对强制绕过前端逻辑直接传弱密码到服务端的用户负责吧
2.撞库不存在的,不会有服务端允许一个用户一直用错误密码尝试登录而不限制吧
3.数据库泄露的话,密码存的也是摘要值,完全可以每个用户一个不同的 salt(自定义的规则串,不用落库,比如用户的用户 id/创建时间等注册后就不变的字段按照一定的规则拼接,再加上一个服务端代码里的固定 salt 串,随你发挥,保证每次要校验用户密码时能拿到就行 salt 所需的信息就行),攻击者想碰撞就碰去吧
@csrocks 前端 hash 后传给你的是 hash 值,你还按之前的 md5(password+salt+password)摘要方式得到 md5(hash+salt+hash)的摘要值不就行了,并不是说把你的摘要算法放到前端去,然后你就不做了,前端可以用 sha1/sha256/PBKDF2 等等摘要算法计算摘要值,只要各个前端都统一加上就行,都是现成的摘要算法,接入根本就不需要什么成本,最大的成本还是项目刚启动时就都没有这个意识,后期改动会造成旧密码不能用,或者要加兼容逻辑
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5905 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 11ms · UTC 01:56 · PVG 09:56 · LAX 17:56 · JFK 20:56
Developed with CodeLauncher
♥ Do have faith in what you're doing.