java - 这样设计App的注册登录系统,合理吗

 林琳奇 发布于 2022-10-29 12:15

服务端数据库有LoginSalt和PasswordSalt两个字段,前者是变化的,后者是固定的。
首先服务端存放的密码是MD5(p + PasswordSalt) (p为明文密码),PasswordSalt是针对每个用户单独生成的,用来防彩虹表。
1.注册的时候
客户端生成PasswordSalt 然后把MD5(p + PasswordSalt) (这里用PasswordSalt是为了防止截取注册密码用彩虹表反推)和 PasswordSalt传递给服务端,如果注册成功,服务端保存这两者
2.登录的时候
首先向服务端请求LoginSalt(LoginSalt在请求时生成,并存入对应的用户中)和PasswordSalt,然后向服务端发送MD5(MD5(p + PasswordSalt) + LoginSalt),然后服务端进行验证,如果验证通过,即登录成功,将重新生成LoginSalt并存入对应用户(防止重放攻击),这时候同时向客户端返回这个LoginSalt,以作为权限高一级API的Token。
这样是否可行?主要想达到的目的有三个,1是防彩虹表,2是防止重放攻击,3是给高权限API一个凭证

3 个回答
  • 功能问题: 如果这样设计, 同一用户就不能同时在多个设备登录

    安全问题: 何必要发明复杂而且未必密码学安全的机制呢, 作为开发者我更愿意相信https + bcrypt

    2022-10-30 12:49 回答
  • 合理,我们的系统 也采用了 差不多的控制. 密码加密是一致的.

    2022-10-30 12:55 回答
  • 能起到防止作用就行,没有绝对的合理和不合理,符合需求就好

    2022-10-30 12:56 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有