课程:《Python程序设计》
班级: 1912
姓名: 李浩鹏
学号:20191204
实验教师:王志强
实验日期:2021年5月27日
必修/选修: 公选课
创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过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程序设计》实验报告所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)