用户登录的认证过程:

我自己设计的(电信级别)用户登录的认证过程:

 ==============================================================================

.*.C/S架构,服务端的数据库已经有了所有的用户列表(用户名/登录密码/其他信息)

1. Client 连接Server端的特定端口,假定Port=12345
2. Server端 收到连接请求,先发出第一个包ACK1,包内容是服务器当前时间Time。
3. Client 收到ACK1,接着发出登录包SEQ1,包内容是用户名的MD5。
4. Server端 验证此用户是否存在(循环比较MD5)
   4a. 如果用户存在,服务端返回继续验证包ACK2。
   4b. 如果用户不存在,服务端返回结果包RET,然后结束认证,断开连接。
5. Client 收到ACK2,发去验证包SEQ2(Time + 用户密码(password)的MD5)
6. Server端 验证密码和时间都正确,发回登录成功包ACK3。

√验证流程简单,只验证用户名+密码
√验证算法简单,目前只用到MD5
√保密性好,不泄漏用户帐号,密码,即使数据包被截获,也不知道用户名密码。并且
MD5很难逆推,所以即使数据包被截获,也不能推算出用户名密码。
√流程巧妙,验证流程将用户名,密码分开两次验证,和常用的登录验证流程不同。
并且是服务端发起的验证。
√扩展性好,比如如果有别的加解密算法,可以把MD5内容再加密封装。
√Time在这里有着重要的意义,既可以让C/S两端都有相同的登录时间,还可以根据这个
时间推算出网络的速度。比如步骤2时,时间是01:02:03,到了步骤4,时间是01:02:04,
那么可以推算网络速度是半秒。至于程序处理的耗时,这个最多几毫秒,忽略不计。

==============================================================================
扩展1:
.*.如果C/S系统有多个加解密的算法,组成算法列表(ED1, ED2, ED3, ...)。
①. 步骤2中,可以返回当前时间和随机指定的算法的序号,比如Time + 2。代表
    以后的往来登录数据包用ED2加解密。
②. 步骤3,Client用ED2加密SEQ1。
③. 步骤4,Server用ED2解密SEQ1,...。返回ED2加密的ACK2
④. 步骤5,Client用ED2解密ACK2。并ED2加密SEQ2。
⑤. 步骤6,Server用ED2解密SEQ2,...。



==============================================================================
扩展2:
在C/S系统的Client和Server通讯中,可能出现某一端断线/死机,而另一端不知道的情况
。因此考虑在两端的连接通讯中加一个协议包ECHO,定时从Server发往Client。我称之为
:“心跳”,ECHO的内容是Server端的当前时间Time。这样既可以达到检查连接的目的,
又可以将Client的时间和Server端的统一,并且Client可以推算出网络的速度。
==============================================================================


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

drg_aguai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值