20191206 实验三《Python程序设计》实验报告

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("\n经服务器解密后的明文是:\n")
    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("加密后的密文是\n{}".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

参考资料

posted @ 2020-05-16 13:43  191206  阅读(538)  评论(0编辑  收藏  举报