资源下载地址:https://download.csdn.net/download/sheziqiong/85621996
资源下载地址:https://download.csdn.net/download/sheziqiong/85621996
SKey 身份认证协议的代码实现
本项目为课程实验内容,简单模拟了通过S/Key协议进行身份认证的过程。
运行环境
系统:Arch Linux
语言:Python 3.9
IDE:Pycharm
实现的功能
- S/Key协议身份认证
- 用户登录日志记录
本项目中S/Key协议认证过程
- 客户端连接服务器,提示用户输入用户名,将输入的用户名发送到服务器
- 服务器在用户信息字典中查询,根据用户名是否存在向客户端发送不同的反馈信息
- 客户端收到反馈信息,根据内容判断:
- 用户名不存在,接受服务器发送的 Seed,与用户名首尾相连后进行一次 MD5 哈希,然后前 8 位与后 8 位进行异或运算,得到 S。对 S 进行 MD5 运算 1 次,得到第 n 个密码;2 次得到第 n-1 个密码;…;n 次得到第 1 个密码。将第一个密码发送到服务器保存在用户信息字典中,依次使用第 2 到 n 个口令进行登录。www.biyezuopin.vip
- 用户名存在,但是生成的 n 个口令已使用完,则进行初始化,过程和用户名不存在的情况一样。
- 用户名存在,且 n 个口令未使用完,则直接提示用户输入口令。
- 用户输入口令,然后输入验证码(若输入错误,则验证码重新生成,提示用户再次输入,直到输入正确)发送到服务器,服务器接收到客户端发送的口令之后,对其进行一次 MD5 哈希运算,将所得结果与用户信息字典中的上一个口令进行比较,根据是否一致发送不同的反馈信息给客户端。
- 客户端收到反馈,若两者一致,则允许登录;否则不允许登录。
对于每一次登录,无论是否成功,都需要记录,记录信息包括时间、用户名、登录是否成功。
结果分析
服务器端正常情况下没有任何输出,只会记录日志文件。
客户端连接上服务器后输入用户名(初始,不存在该用户,进行注册并生成新的口令):
[]
手动将生成的口令复制到本地文件中,然后使用第 1 个口令(实际是生成的第二个口令,因为真正的第一个口令已经发送到了服务器端进行保存)登录,登录成功。www.biyezuopin.vip
[]
然后再次登录,此时仍使用第一个口令,查看结果,发现登录失败。
使用第二个口令尝试,登录成功。
当四个口令使用完后,再次尝试登录,重新生成口令。
注册一个新的用户,确保服务器在多个用户存在的前提下仍能正常工作。
[]
对于每一次的用户登录,服务器均会记录日志,对于以上登录过程,记录的日志内容如下图所示。
资源下载地址:https://download.csdn.net/download/sheziqiong/85621996
资源下载地址:https://download.csdn.net/download/sheziqiong/85621996