基于S/Key协议的身份认证系统设计与实现【python】

news/2024/11/9 2:49:42/

实验内容

1  身份认证系统设计

设计身份认证系统的功能、主要界面、主要软件模块,以及采用的认证技术路线和方法。

2  编程实现所设计的身份认证系统

在C++、Python或Java程序设计环境下,编程实现基于S/Key协议的身份认证系统。要求实现的身份认证系统至少具备以下功能:

(1)支持用户名/口令/验证码机制的身份认证;

(2)满足动态口令的技术要求;

(3)当前口令序列使用完毕后能够继续协商;

(4)记录用户登录日志,支持日志查看。

3  软件测试及优化。

在实验室所在的局域网内,对设计实现的身份认证系统进行简单的测试,对发现的问题和软件存在的缺陷进行改进和优化。

4 、实验分析和 总结 

实验思路

本实验采用客户端/服务器的交互模式,来模拟实现基于S/Key协议的身份认证系统

S/Key协议身份认证流程

1.初始化

①用户在客户端输入用户名(应限制用户名的格式,如长度、包含的字符等),并将其发送到服务器

②服务器接收到客户端发送来的用户名,判断该用户名是否已经注册,如果未注册,则向用户发送一个种子:SEED(注意:客户端每次向用户发送的种子应当不同);然后再服务器端应当保存该用户名

③客户端接收到种子之后进行预处理:先将用户名和种子拼接成一个字符串,然后对该字符串进行MD5哈希,再将MD5加密后的结果前16字节和后16字节进行异或运算,结果记为S

2.生成口令序列

①对S进行MD5哈希,得到口令

②将第一个口令发送到服务器,作为初始登录的密码;接下来依次使用第2—N个口令进行登录

3.登录流程

①用户输入口令序列,将输入的内容发送到服务器,在服务器通过对保存下来的密码进行MD5哈希,与口令序列进行比对,验证口令是否正确

②在用户输入用户名时,如果用户名已注册,则直接使用注册时生成的口令序列依次登录

③如果口令验证成功,则服务器生成验证码,发送给用户,用户输入验证码进行登录

④验证码输入正确,则登录成功

4.口令序列使用完毕后的协商策略

①在服务器端记录当前用户可用的口令条数

②每当口令验证成功后,可用的口令条数减一

③口令使用完毕,服务器向用户发送提示和种子,再客户端依据种子重新生成N条口令序列用于登录

实验结果

1. 用户名还未注册:

客户端输入用户名,进行注册:

注册成功后生成5条口令,其中第一条口令存储到服务器端:

客户端可以使用剩下的4条口令进行登录:

使用第1条口令进行登录:

口令验证正确,然后服务器生成验证码,发送给客户端,接下来输入验证码进行登录:

验证码输入正确,登录成功;

2. 用户名已经注册:

如果用户名存在,则直接输入口令进行登录

由于第一条口令已经使用过,再次使用第一条口令会提示登录失败:

此时我们更换第二条口令即可:

如果验证码输入错误,也会导致登录失败:

如果输入正确的验证码,就会登录成功:

3. 用户名已注册,但是生成的口令已经使用完:

会重新进行初始化,生成4条口令,依次使用这四条口令即可进行登录

4. 多个客户端同时登录的情况

可以看到两个客户端同时连接服务器,都成功进行了登录

5. 日志查看功能:

生成log.txt文件,将日志内容添加到文件中

实验源码

基于S/Key协议的身份认证系统设计与实现


http://www.ppmy.cn/news/64032.html

相关文章

8年测试开发,写给1-3年功能测试的几点建议,满满硬货指导

从15年毕业到现在也从业八年了,普通本科毕业,现在一家互联网公司担任测试部门总监,摸爬打滚,坑坑洼洼也经历了不少。思绪很久决定还是写下这篇,希望对后进的小伙子少走一点弯路。 很多人把职场想得太美好,其…

ubuntu 卸载 软件包 libfdt-dev

编译环境 Win10 64位 ubuntu 20.04 虚拟机 VMware Workstation 16 Pro NUC980 bsp 自带的编译工具链: nuc980bsp.tar.gz,版本 gcc version 4.8.4 (GCC) NUC980 uboot : https://gitee.com/OpenNuvoton/NUC970_U-Boot_v2016.11 目标 手动编译 NUC9…

目标检测YOLO实战应用案例100讲-基于YOLOv3的目标检测研究及改进(论文篇)

知识拓展 多尺度特征学习 目前深度学习用于目标检测已经习以为常。从SSD到Yolo系列,其中: 深层网络的感受野比较大,语义信息表征能力强,但是特征图的分辨率低,几何信息的表征能力弱(空间几何特征细节缺乏); 低层网络的感受野比较小,几何细节信息表征能力强,虽然分辨…

三角形的面积+核桃的数量(JAVA解法)

三角形的面积:用户登录 题目描述 平面直角坐标系中有一个三角形, 请你求出它的面积。 输入描述 第一行输入一个 T ,代表测试数据量 每组测试数据输入有三行,每行一个实数坐标 (x,y) 代表三角形三个顶点。 1≤T≤103,−105≤x,y≤105 输…

pycharm 常用插件,常用插件推荐

1. Key Promoter X 如果让我给新手推荐一个 PyCharm 必装插件,那一定是 Key Promoter X 。 它就相当于一个快捷键管理大师,它时刻地在: 教导你,当下你的这个操作,应该使用哪个快捷操作来提高效率?提醒你…

ARM学习(21)STM32 外设Can的认识与驱动编写

笔者来聊聊can的认识以及can接收数据的驱动编写 1、STM32 Can 外设的认识 Can的特性就不多说了,主要来聊聊can的一些标识符以及收发状态。can有一套收发机制,发送和接收都有硬件缓存,叫邮箱,通过下面的图可以看出,下面…

国产自研数据库是更新换代首选

伴随着数字经济的高速发展,越来越多的企业都意识到了数据是现代企业最具价值的资产。而与之相对应的是,数据库的重要性也随之水涨船高。 近年来,在席卷全球的云原生大潮中,数据库产业迎来了极为重要的转型升级。特别是在自主创新的…

Melis4.0[D1s]:8.显示测试:图片格式和透明度

文章目录 1.准备素材图片1.1 测试图片像素格式的软件RawViewer.exe1.1.1 使用方法 1.2 自己生成测试图片 2.D1s显示引擎介绍(不保证正确)2.1 D1s 可以有2个独立的display device输出(可以同时接2个显示器)2.2 D1s 的 DISP0 有2个通…