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

news2024/11/24 17:59:44

实验内容

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.coloradmin.cn/o/499669.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机中丢失msvcp140.dll无法启动此程序怎么办?msvcp140.dll在哪里

电脑系统中的 msvcp140.dll 文件是 Microsoft Visual C Redistributable 组件的一部分,它们提供了许多在 Windows 操作系统中运行的应用程序所需的重要函数和库。如果丢失了 msvcp140.dll 文件,你可能会遇到多种错误,比如无法运行应用程序、系…

【RabbitMQ】安装及六种模式

文章目录 安装rabbitmq镜像访问容器内部15672端口映射到外面的端口地址RabbitMQ六种模式Hello world模式Work queues模式Publish/Subscribe模式交换机fanout类型 Routing模式Topics模式RPC模式 rabbitmq:0->1的学习 学习文档:https://www.cnblogs.com…

Java集合之双列集合

双列集合特点 双列集合一次需要添加一对数据,分别是键和值键不能重复,值可以重复键和值是一一对应的,每一个键只能找到自己对应的值键 值这个整体称为“键值对”或者“键值对对象”,Java中叫“Entry对象” 双列集合的体系结构 Ma…

linux系统systemd初始化进程

前言:目前绝大多数服务器系统以及从RHEL6换成RHEL7了,以前习惯使用service来管理系统服务的,那么现在就比较郁闷了,RHEL7系统中使用systemctl命令来管理服务。 systemctl启动、重启、停止、查看状态命令: systemctl …

算法竞赛字符串篇之C++中string的成员函数

2023年5月7日,周日中午: 今天决定从字符串这个知识点开始学起,记录一下我今天的字符串学习。 不定期更新。 相关的英文文档: https://cplusplus.com/reference/string/string/ 容量方面的成员函数: empty&#xff…

基于AT89C51单片机的电子闹钟设计与仿真

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87761718?spm=1001.2014.3001.5503 源码获取 主要内容: 基于51单片机设计一个电子闹钟,至少具有以下功能:时间的设定、时间的调整、闹钟的设定、温度的设定。 基本要求:…

排队论_M/M/1/inf/inf 问题

例:某修理店只有一一个修理工人,来修理的顾客到达数服从泊松分布,平均每小时4人;修理时间服从负指数分布,平均需6分钟。求: (1)修理店空闲的概率; (2)店内有3个顾客的概率; (3)店内至少有1个顾客的概率; (4)店内顾客的平均数; (5)顾客在店内的…

显著性检测:从传统方法到深度学习网络的演进与挑战

显著性检测技术在计算机视觉领域中扮演着至关重要的角色,它是一项对图像中最显著或最有区别的视觉特征进行分析和提取的技术。显著性检测技术可以为计算机视觉任务提供帮助,例如图像分割、目标检测、场景理解、图像检索和人机交互等方面。 本文将从传统方…

【MySQL】基于规则的优化(内含子查询优化;派生表;物化表;半连接;标量子查询;行子查询)

概念 常量表:下述两种查询方式查询的表: 类型1:查询的表中一条记录都没有,或者只有一条记录。 类型2:使用主键等值匹配或者唯一二级索引列等值匹配作为搜索条件来查询某个表 派生表:放在FROM子句后面的子…

UDP报头、TCP报头、IP报头、MAC头部、ARP头部

前言:DUP报头、TCP报头、IP报头、MAC头部、ARP头部。 UDP报头: UDP报头由八个字节组成,每个字段都是两个字节 : 1.源端口号:发送方端口号,需要对方回信的时候选用,不需要对方回信的时候置0 …

[LeetCode复盘] LCCUP‘23春季赛组队赛 20230507

[LeetCode复盘] LCCUP23春季赛组队赛 20230507 一、本周周赛总结1. 符文储备1. 题目描述2. 思路分析3. 代码实现 2. 城墙防线1. 题目描述2. 思路分析3. 代码实现 3. 提取咒文1. 题目描述2. 思路分析3. 代码实现 4. 生物进化录1. 题目描述2. 思路分析3. 代码实现 5. 与非的谜题…

HNU-操作系统OS-实验Lab3

OS_Lab3_Experimental report 湖南大学信息科学与工程学院 计科 210X wolf (学号 202108010XXX) 实验目的 了解虚拟内存的Page Fault异常处理实现了解页替换算法在操作系统中的实现 实验内容 本次实验是在lab2的基础上,借助于页表机制…

【python数据分析】运算符与表达式

🙋‍ 哈喽大家好,本次是python数据分析、挖掘与可视化专栏第三期 ⭐本期内容:运算符与表达式 🏆系列专栏:Python数据分析、挖掘与可视化 👍保持开心,拒绝拖延,你想要的都会有&#x…

车载软件架构——闲聊几句AUTOSAR BSW(四)

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 我们并不必要为了和谐,而时刻保持通情达理;我们需要具备的是,偶尔有肚量欣然承认在某些方面我们可能会有些不可理喻。该有主见的时候能掷地有声地镇得住场…

iOS 对https App内部的http请求进行白名单设置

苹果从iOS9开始要求应用使用Https链接来对请求进行加密,来保证数据的安全.如果使用http请求将会报错,当然,如果你想继续使用http请求,有两种方式: 1.使用ASIHttpRequest来请求,ASI是使用CFNetwork来处理请求的,更底层些,避开了苹果的限制 2.在Info.plist文件设置如下 <key…

Docker安装常用软件-Apollo(有问题)

零&#xff1a;apollo概念介绍 官网网站&#xff1a;GitHub - apolloconfig/apollo: Apollo is a reliable configuration management system suitable for microservice configuration management scenarios. gitee网址&#xff1a;mirrors / ctripcorp / apollo GitCode …

自学软件测试简历没项目写怎么办?

目录 一、引言 二、测试任务 三、测试进度 四、测试资源 五、测试策略 六、测试完成标准 七、风险和约束 八、问题严重程度描述和响应时间规范 九、测试的主要角色和职责 软件测试是使用人工或者自动的手段来运行或者测定某个软件系统的过程&#xff0c;其目的在于检验…

Python:Python进阶:Python字符串驻留技术

Python字符串驻留技术 1.什么是字符串驻留2. 为什么要驻留字符串3. Python的字符串驻留4. Python 字符驻留原理4.1 如何驻留字符串4.2 如何清理驻留的字符串 5. 字符串驻留的实现5.1. 变量、常量与函数名5.2 字典的键5.3 任何对象的属性5.4 显式地驻留 6 字符串驻留的其他发现 …

MySQL --- DML

接下来学习第二个部分&#xff1a;根据页面原型以及需求进行相关功能的开发&#xff0c;进而完成数据库的操作。 学习数据库的DML操作 3. 数据库操作-DML-insert&#xff0c;update,delete DML DML英文全称是Data Manipulation Language(数据操作语言)&#xff0c;用来对数据…

176_工具_Power BI 实用工具 pbi-utils 更新至 v1.0.3.1

176_工具_Power BI 实用工具 pbi-utils 更新至 v1.0.3.1 pbi-utils 更新至&#xff1a;v1.0.3.1, 从 v1.0.0.0 到 v1.0.3.1 更新了 8 次。 文档地址&#xff1a;https://jiaopengzi.com/2880.html 主要功能&#xff1a; 快速设置 Power BI 模板&#xff0c;实现高复用。设计…