直接把用户输入的密码按照一定的规则生成一个 salt(比如把密码的字符每 n 个字符删除一个,然后用 md5 或其他算法生成一个摘要值作为原始密码的 salt),然后 PBKDF2 算法生成一个摘要值传给服务端,服务端无法知道原始密码,也不需要知道,直接用传过来的摘要串做后面的逻辑(用加盐摘要算法生成摘要串落库/前面的方式对前端传过来的摘要串操作后和库里的对比是否密码正确)
1.密码强度验证逻辑没必要放在服务端,不会有人要对强制绕过前端逻辑直接传弱密码到服务端的用户负责吧 2.撞库不存在的,不会有服务端允许一个用户一直用错误密码尝试登录而不限制吧 3.数据库泄露的话,密码存的也是摘要值,完全可以每个用户一个不同的 salt(自定义的规则串,不用落库,比如用户的用户 id/创建时间等注册后就不变的字段按照一定的规则拼接,再加上一个服务端代码里的固定 salt 串,随你发挥,保证每次要校验用户密码时能拿到就行 salt 所需的信息就行),攻击者想碰撞就碰去吧