素材牛VIP会员
这样设计App的注册登录系统,合理吗
 青***e  分类:Java代码  人气:1003  回帖:3  发布于6年前 收藏

服务端数据库有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)垃圾回帖将一律封号处理……

Lv6 码匠
骨***活 产品经理 6年前#1

合理,我们的系统 也采用了 差不多的控制. 密码加密是一致的.

Lv5 码农
卡***丢 软件测试工程师 6年前#2

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

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

Lv5 码农
xu***ui Linux系统工程师 6年前#3

能起到防止作用就行,没有绝对的合理和不合理,符合需求就好

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取