加解密验证用户的合法性

前言

这章讲述 加解密验证用户的合法性, 比较适合短时间内效率并数据量较小的 验证
优点:后端不需要存储 ,不要RPC/消息 方式 去校验,增加校验效率

## 1:正常方式
游戏中 使用场景,这里先列举2种(应该有很多地方都可以用到)
1> 登录到 网关验证
(1) 前端登陆成功后,一般获取到token及网关地址(负载均衡), token 存redis或其他 ,都会设置过期时间(分钟单位就够了)
(2)如果连接网关后,网关需要需拿token去redis 验证,再得到UID,去加载相应的角色数据
2>匹配完 到 战斗房间服(eg:moba类)
(1)匹配完 会通知前端 链接 房间服的地址
(2) 链接房间服会验证下玩家是否合法

# 2:新方式验证
这里以 登录到 网关验证 为例说明(加密字段可以自行增删)
1>前端登陆成功后, 把 UID,时间戳,网关地址 服务器ID,前端IP 其他参数(没有也可以加个随机数) 以某格式生成字符串明文(json格式字符串都是可以的) ,保证密文不能太短,也不要太长
2> 明文 MD5/HASH 生成校验码
3> 明文 ASE128/256 或 ECC(登陆私钥,网关公钥) 生成密文
4> 发校验码,密文,网关地址 发给前端,前端再把 校验码,密文 发给网关
5>网关解密密文得到明文
(1) 明文格式是否正确 (该有的参数要有)
(2) 明文是否被篡改(生成校验码 比较 2个校验码)
(3) 判定时间戳是否还有效(类试redis的过期时间)
(4) 判定当前网关地址跟明文中是否一致
(5) 判定当前服务器ID跟明文中是否一致
(6) 判定前端IP跟明文中是否一致
6>得到明文中的UID 去加载相应的角色数据

#3:密钥 策略及算法
不管是ASE 还是 ECC 都是需要密钥的
1> 密钥生成
由密钥生成服务器生成密钥(一天一次),存储到数据库及redis
需要密码的服务器启动后去缓存中取,
在线的服务器订阅/MQ 等 获取
2> 策略
(1)假如 约定每天凌晨5点(找个登陆人数少的时间点就行),切换密钥
(2)密钥生成服务器,每天4点就生成(3点也行),存储起来 ,存储永远只存2组(上次的,新生成的),格式类似 生成时间(一天切换一次到天就行) 密钥
(3)5点左右的处理方式,就是用2个密钥试,类试TOKEN有效期,过某时间后就只用当天最新的密钥解密
如果还要精确点,发给前端的带上一个时间戳(去掉秒),前端也需带上这个时间戳
3>算法 一般自行评估
(1) 摘要算法选择, MD5、CRC32、SHA1,SHA256 ,个人觉得MD5够用了
(2) 加解密算法 安全性及效率 综合应用需求 综合考虑,ASE128/256 或 ECC, 个人觉得ASE128 够用了

你可能感兴趣的:(杂项,redis,算法)