zoukankan      html  css  js  c++  java
  • 魔兽世界电子令牌数据库设计的一些推测

    需求:

    1. 帐号绑定,一个电子令牌可以绑定多个帐号。

    2. 登陆验证,提供用户名跟电子令牌产生的动态密码。

    假设:

    1.电子令牌是一个电子表(能提供时间数据,但是一但出厂就不能再进行时间调整,故有时间误差存在)

    2.每个电子令牌内置一个唯一的key(guid)。

    3.电子令牌,根据 dPwd= hash(key+时间) 产生密码。

    将dpwd跟Username,通过游戏登录界面发送到帐号服务器进行验证,获取会话Session凭证,进行游戏。

    ----------------------------------

    数据库设计

    电子令牌表(eId,key,生产信息,初始时间偏移量,...)生产企业数据库。

    使用中的令牌表(eId,key,时间偏移量,Username)

    令牌帐号绑定表(eId,帐号名称)

    ------------------------------------------

    1. 绑定

    input: username(游戏帐号),eId,加 clientDPwd

    处理过程: 1.确定eId有效

    2.根据数据库记录,计算 ServDPwd=hash(key + 当前时间)

    3.比较ServDPwd==ClientDPwd

    4.绑定成功,写入"使用令牌表", "令牌帐号绑定表"

    2.验证

    input: username,ClientDPwd

    处理过程:使用绑定表获取令牌key计算ServDPwd进行对比

    以上过程没考虑时间误差,假设允许正负5分钟的误差,以上两个过程应做如下调整。

    1.绑定:计算 ServDPwd1= hash(key+(当前时间-5分钟)),ServDPwd2=hash(key+(当前时间-4分钟)),....

    计算10组ServDPwd(1,10), 分别比较ClientDPwd,

    如有 ServDPwdn=ClientDPW,记录"使用灵牌表values(eId,key,n)--n为匹配那一组的时间偏移量,注意n可为负数",

    记录"帐号绑定表".

    2.验证

    input:username,ClientDPwd

    1. ServDPwd=Hash(key+(当前时间+n)),

    2. 比较ServDPwd==ClientDPwd

    2.1.成功,验证通过,返回Session凭证

    2.2.失败,计算ServDPwdm=Hash(key+((当前时间+n)+m)),--m为正负调整时间,可以取[-5,5].

    2.2.1.比较ServDPwdm=ClientDPwd

    2.2.1.1成功,更新使用令牌的"时间偏移量"字段为 "n+m"(m表示匹配的那一组偏移分钟)

    -----------------------------------------------------

    另外中国有1000多万魔兽世界玩家,那么用户数据库应该比较庞大,考虑验证速度,

    考虑将用户名,根据首字符(a-z,0-9) ,分配到30来个数据库( 这样,每个数据库的用户数就多在100万以内了)

  • 相关阅读:
    JAVA应用程序占用CPU、内存过高分析过程
    html和css问题?
    html跳动的心实现代码
    css知识点总结
    html注册栏网页练习代码
    前端开发单词大全
    html常用代码合集
    html背景图星际导航图练习
    html迪士尼网页实现代码
    html阿里云网页练习实现代码
  • 原文地址:https://www.cnblogs.com/wdfrog/p/1751141.html
Copyright © 2011-2022 走看看