java - 这样设计App的注册登录系统,合理吗
高洛峰
高洛峰 2017-04-17 17:52:56
[Java讨论组]

服务端数据库有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一个凭证

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(3)
阿神

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

PHP中文网

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

ringa_lee

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

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号