20202418 2021-2022-2 《Python程序设计》实验3报告

20202418 2021-2022-2 《Python程序设计》实验3报告

课程:《Python程序设计》
班级:2024
姓名:于宗源
学号:20202418
实验教师:王志强
实验日期:2022年5月3日
必修/选修: 公选课

1.实验内容

创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。

2. 实验过程及结果

实验过程

1、加解密算法的设计

利用PYdes模块中的des方法即可实现python的对称加密,具体实现如下:
pyDes.des(key,[mode],[IV],[pad],[padmode])
key-> 包含加密密钥的字节。DES 8个字节,16或24个字节用于三重DES;
mode-> 加密类型的可选参数,可以是pyDes.ECB(电子密码簿)或pyDes.CBC(密码块链接)
如果使用CBC模式,则必须提供IV->可选的初始值字节。长度必须为8个字节;
pad-> 可选参数,设置填充字符(PAD_NORMAL)以在使用此实例完成的所有加密/解密操作;
padmode-> 可选参数,设置填充模式(PAD_NORMAL或PAD_PKCS5)在对此实例执行的所有加密/解密操作期间使用。
基于此,我设计了如下两个加密类和解密类
在这里插入图片描述
在这里插入图片描述

2、服务器的设计在这里插入图片描述

依据王志强老师的课件提供的搭建思路搭建如下服务器
在这里插入图片描述
先初始化套接字,确定到底是UDP还是TCP;然后绑定自己的主机地址(服务器必须使用127.0.0.1回送地址或者自己的地址(利用cmd输入ipconfig指令即可查询))
在这里插入图片描述
然后开始监听,阻塞的意思是不给予反馈操作就一直等着,比如c语言的scanf就是阻塞。这里面的accept就是一种阻塞的方法,没有反馈值就一直等着。
最后利用recv方法接收到编码后的消息时,不要忘记利用decode()方法解码。接下来就是简单的文件操作了。
利用open打开目录下存放密文的文件,然后利用文件的write方法写入。接下来就是解密传输过来的数据。
实例化后,利用里面的input_key()方法修改密钥,然后利用decrypt(secret)方法进行解密(由于是对称加密,所以要和加密密钥一样,否则无法解出来明文)然后将明文也写入文件中、
最后服务器会给予客户端一个反馈,并将加密后的数据反馈给客户端,随后关闭服务器。

3、客户端的设计

我们也是依据王老师提供的思路。
(1)创建套接字,连接远端地址#socket.socket(socket.AF_INET,socket.SOCK_STREAM),s.connect()
(2)连接后发送数据和接收数据

s.sendall(),s.recv()

(3)传输完毕后,关闭套接字

s.close()

在这里插入图片描述
思路和服务器的创建十分类似,具体每个代码的作用也都是在代码中体现了。故不再赘述。

实验结果

1、在文件中编写自己要发送的信息

在这里插入图片描述

2、打开服务器和客户端

在这里插入图片描述
在这里插入图片描述
打开客户端会直接读取文档中明文的内容,然后等待输入加密密钥

3、输入加密密钥

以zyzyyyds为例
在这里插入图片描述
可以看到密文成功被传输过来了

4、输入解密密钥

在这里插入图片描述
我们输入密钥,成功地解密并直接输入。
同时在另一个文本文档中会记录密文和明文
在这里插入图片描述

3. 实验过程中遇到的问题和解决过程

  • 问题1:服务器和客户端的ip地址只能填写127.0.0.1回送地址或是主机的地址嘛?
  • 问题1解决方案:在百度和csdn上搜索无果,我选择直接通过微信问王志强老师。我了解到了对于服务器而言,只能填写主机的ip地址;但是对于客户端而言可以写其他的ip地址,也就是连接其他人ip地址。
  • 问题2:如果服务器和客户端不在一个局域网内怎么办?
  • 问题2解决方案:服务器一定需要一个公网的地址,在必要的情况下可能需要利用内网的穿透技术,从而让不在同一局域网下的客户端通过公网地址访问到你的服务器。

其他(感悟、思考等)

以前一直听别人说python很简单很方便,我不知道为啥大家一直都说python学会了能解决很多问题,还特别方便,我以前非常不能理解:同样都是高级语言,python怎么就能具有这么大的特点呢?现在我非常能感受到它的便利了:比如我学了一个学期的C语言,我还是只会做很多简单的事情:什么排个序啦、处理一组数据啦、比格大小啦啥的。同时咱们就以排序为例,c语言排序要写很多行代码,同时还有什么二叉排序、选择排序等一堆算法。但是在python里,直接用对应的方法就可以了。仅仅是通过选修课的学习,我就已经学会了可视化的实现、联机和加密等技术:只需要引入库文件(甚至这个文件直接在pycharm点点就能下载安装了),然后利用里面已经存在的方法稍加修改就成为自己想要的样子了。
python是真的很厉害,在接下来的大创,我亦要将python利用好,让python在我今后的生活中成为有力的工具。

参考资料

posted @ 2022-05-03 21:46  20202418于宗源  阅读(22)  评论(0编辑  收藏  举报