20191204李浩鹏2020-2021-2实验三《Python程序设计》实验报告

20191204李浩鹏2020-2021-2实验三《Python程序设计》实验报告,第1张

概述201912042020-2021-2《Python程序设计实验报告课程:《Python程序设计》班级:1912姓名:李浩鹏学号:20191204实验教师:王志强实验日期:2021年5月27日必修/选修:公选课1.实验内容创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/ 20191204 2020-2021-2 《Python程序设计》实验三报告

课程:《Python程序设计》
班级: 1912
姓名: 李浩鹏
学号:20191204
实验教师:王志强
实验日期:2021年5月27日
必修/选修: 公选课

1.实验内容

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

2. 实验过程及结果客户端

首先设置好AES算法的相关环境,设置key

然后读取一个文件,对其内容进行加密,然后输出一下加密后结果给用户看一下

接下来,连接到服务器上,把密文发送给服务器

最后 ,关闭文件,关闭客户端

from Crypto.Cipher import AES#客户端的Socket初始化def splice(text):    while len(text) % 16 != 0:        text += b' '    return text# 拼接秘钥,秘钥长度需为16的倍数,不足则拼接空格def splice_key(key):    while len(key) % 16 != 0:        key += b' '    return keyif __name__ == '__main__':    s = socket.socket(socket.AF_INET,socket.soCK_STREAM)    #参数1:服务器之间网络通信;参数2:流式socket , for TCP    s.connect(('127.0.0.1', 8001))#连接,元组的形式,(IP地址,端口)    f = open(input("请输入文件名:"), "r+")    f0 = f.readlines()    f0 = ''.join(f0)    text = f0    text = text.encode()    key = b'20191204'  # 秘钥    aes = AES.new(splice_key(key), AES.MODE_ECB)  # 根据秘钥初始化加密器    encrypted_byte = aes.encrypt(splice(text))  # 使用加密器的加密方法对文本进行加密,返回加密结果(byte类型)    print("encrypted_byte: ", encrypted_byte)    s.sendall(encrypted_byte)    f.close()    s.close()

服务器

首先设置好 AES的相关环境,设置相同的key

然后设置好服务器,等待客户端连接

接受 客户端的密文 ,进行解密

将解密后的明文 ,写入一个新建的文件里。

最后 ,输出新建文件中的内容,关闭服务器

import socketfrom Crypto.Cipher import AESdef splice(text):    while len(text) % 16 != 0:        text += b' '    return text# 拼接秘钥,秘钥长度需为16的倍数,不足则拼接空格def splice_key(key):    while len(key) % 16 != 0:        key += b' '    return key# 服务器端的socket初始化s = socket.socket(socket.AF_INET, socket.soCK_STREAM)  # 参数1:服务器之间网络通信;参数2:流式socket , for TCP# s = socket.socket()s.bind(('127.0.0.1', 8001))  # 绑定. localhost = 127.0.0.1,port=0-65535s.Listen()  # 监听conn, address = s.accept()  # 阻塞data = conn.recv(1024)  # 接收# print(data.decode())key = b'20191204'  # 秘钥aes = AES.new(splice_key(key), AES.MODE_ECB)  # 根据秘钥初始化加密器decrypt_byte = aes.decrypt(data) # 使用加密器的解密方法对文本进行解密,返回解密结果(byte类型)decrypt_byte = decrypt_byte.decode()#print("decrypt_str: ", str(decrypt_byte, enCoding='utf-8', errors="ignore"))  # 将字节# conn.sendall(("服务器已经接收到了数据内容:"+str(data.decode())).encode())name = input("请填写解密后明文的文件名称:")f = open(name,"w+")f.write("\n经服务器解密后的明文是:\n")f.write(decrypt_byte)f.close()f = open(name,"r+")f0 = f.readlines()f0 = ''.join(f0)print(f0)f.close()s.close()

gitte开源代码

https://gitee.com/besti2021python/l20191204/tree/master/

3. 实验过程中遇到的问题和解决过程问题1:采用何种加密算法,以及算法的加解密算法。问题1解决方案:通过百度搜所发现了python中要crypto相关的库,采用了python3.6安装pycrypto,pycrytodome和crypto中的方法安装了相关的库,并且根据相关教程配置好了AES算法。问题2:读取文件并转换成字节的方法还是有点不熟悉。问题2解决方案:查了查教材和文档,但是由于AES只能加密ascii码中的字符,由于汉字的编码方式不同,现在文件中还无法出现汉字,只能使用英文。转换字节的方法:上链接https://blog.csdn.net/cyan20115/article/details/106548750...其他(感悟、思考等)

在遇到不会的事情时,首先要想到的通过自己动手解决,我们现在的问题之前肯定要也有好多人遇到过,并且解决。搜集信息的能力很重要。如果是在搜不到的问题,建议返回头在看一眼代码,有可能是自己理解还不到位。

参考资料

《Java程序设计与数据结构教程(第二版)》

《Java程序设计与数据结构教程(第二版)》学习指导

python3.6安装pycrypto,pycrytodome和crypto

总结

以上是内存溢出为你收集整理的20191204李浩鹏2020-2021-2实验三《Python程序设计》实验报告全部内容,希望文章能够帮你解决20191204李浩鹏2020-2021-2实验三《Python程序设计》实验报告所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1185845.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存