魔兽世界电子令牌数据库设计的一些推测

本文介绍了一种基于电子令牌的身份验证方案,包括帐号绑定与登录验证流程,并考虑了时间误差问题,同时提出了针对大规模用户的游戏登录解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:

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万以内了)

<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值