20191206 2019-2020-2 《Python程序设计》实验三报告
课程:《Python程序设计》
班级: 1912
姓名: 陈发强
学号:20191206
实验教师:王志强
实验日期:2020年5月16日
必修/选修: 公选课
1.实验内容
创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
(2)要求包含文件的基本操作,例如打开和读写操作。
(3)要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。
(4)程序代码托管到码云。
2. 实验过程及结果
服务器
-
首先设置好 SM2 算法的相关环境,设置公钥和私钥
-
然后设置好服务器,等待客户端连接
-
接受 客户端的密文 ,进行解密
-
将解密后的明文 ,写入一个新建的文件里。
-
最后 ,输出新建文件中的内容,关闭服务器
import socket import base64 import binascii from gmssl import sm2, func #16进制的公钥和私钥 private_key = '00B9AB0B828FF68872F21A837FC303668428DEA11DCD1B24429D0C99E24EED83D5' public_key = 'B9C9A6E04E9C91F7BA880429273747D7EF5DDEB0BB2FF6317EB00BEF331A83081A 6994B8993F3F5D6EADDDB81872266C87C018FB4162F5AF347B483E24620207' sm2_crypt = sm2.CryptSM2( public_key=public_key, private_key=private_key) s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) host = socket.gethostname() port = 12345 s.bind((host,port)) s.listen(5) new_s,addr = s.accept() data = new_s.recv(1024) #print(data) dec_data =sm2_crypt.decrypt(data) dec_data = dec_data.decode() #print(dec_data) name = input("请填写解密后明文的文件名称") f = open(name,"w+") f.write(" 经服务器解密后的明文是: ") f.write(dec_data) f.close() f = open(name,"r+") f0 = f.readlines() f0 = ''.join(f0) print(f0) f.close() new_s.close()
客户端
-
首先设置好 SM2 算法的相关环境,设置公钥和私钥
-
然后读取一个文件,对其内容进行加密,然后输出一下加密后结果给用户看一下
-
接下来,连接到服务器上,把密文发送给服务器
-
最后 ,关闭文件,关闭客户端
import socket import base64 import binascii from gmssl import sm2, func #16进制的公钥和私钥 private_key = '00B9AB0B828FF68872F21A837FC303668428DEA11DCD1B24429D0C99E24EED83D5' public_key = 'B9C9A6E04E9C91F7BA880429273747D7EF5DDEB0BB2FF6317EB00BEF 331A83081A6994B8993F3F5D6EADDDB81872266C87C018FB4162F5AF347B483E24620207' sm2_crypt = sm2.CryptSM2( public_key=public_key, private_key=private_key) c = socket.socket(socket.AF_INET,socket.SOCK_STREAM) host = socket.gethostname() port = 12345 c.connect((host,port)) f = open(input("请输入文件名"),"r+") f0 = f.readlines() f0 = ''.join(f0) data = f0 data = data.encode() enc_data = sm2_crypt.encrypt(data) print("加密后的密文是 {}".format(enc_data)) c.sendall(enc_data) f.close() c.close()
3. 实验过程中遇到的问题和解决过程
- 问题1:文件操作有点忘了
- 问题1解决方案:查了查教材和文档
- 问题2:SM2 算法怎么弄
- 问题2解决方案:在网上找了找资料
其他(感悟、思考等)
学会搜索很重要,我们现在遇到的很多问题,大多数都已经被别人解决过,并且答案已经被公开了。如果能学会搜索,那么多数问题都能得到解决,从而帮助我们
更快地进步成长。学会使用Google。
码云链接
https://gitee.com/cfqlovem-521/pycharmfile2/blob/master/codes/python选修实验三client.py
https://gitee.com/cfqlovem-521/pycharmfile2/blob/master/codes/python选修实验三server.py