zoukankan      html  css  js  c++  java
  • 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("
      经服务器解密后的明文是:
      ")
      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

    参考资料

  • 相关阅读:
    模糊查询的like '%$name$%'的sql注入避免
    在VS2010中使用Git(转)
    android WebView解析 调用html5
    git
    推荐!手把手教你使用Git
    羽毛拍十大品牌
    乒乓球拍板和皮子世界排名
    足球小记
    centos 网络启动 在/etc/sysconfig/network-scripts/ifcfg-eth1onboot=yes即可
    MyEclipseGen--------生成
  • 原文地址:https://www.cnblogs.com/cfqlovem-521/p/12900213.html
Copyright © 2011-2022 走看看