zoukankan      html  css  js  c++  java
  • 20184313 实验三《Python程序设计》实验报告

    20184313 2019-2020-2 《Python程序设计》实验三报告

    课程:《Python程序设计》
    班级: 1843
    姓名: 孙炜力
    学号:20184313
    实验教师:王志强
    实验日期:2020年5月15日
    必修/选修: 公选课

    1.实验内容

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

    2. 实验过程及结果

    • 程序框架

    • enc_send(message, sm2_crypt, s)函数

      这个函数主要用于把massage信息用sm2_crypt的加密方法加密后再用s套接字进行发送。

      • 当message传入的参数是bytes型变量时,直接进行加密;message传入的参数为字符串时,要先转换为bytes型变量再进行加密。
    • dec_recv(sm2_crypt, s, l)函数

      这个函数主要用于从s接收加密数据,将其解密并返回解密结果。

      这个函数主要功能就是从后序序列中找出相应的操作数和运算符,先取最后一位为运算符,然后根据运算符的种类判断操作数的个数,取最后的操作数,并调用JiSuan函数进行运算

    • 运行结果

      测试用例:

      sample1.txt
      

      [码云链接][https://gitee.com/sun_wei_li/SWL-20184313/tree/master/sy3]

    3.实验过程中遇到的问题和解决过程

    • 问题1:实验中由于SM2算法加密结果长度和明文长度不一致,因此之前在按明文长度接收时会产生接收不全的情况。
    • 问题1解决方案:接收时最大接收长度设置稍长一些,普通消息设置为1024,明文设置为明文长度的二倍。
    • 问题2:由于采用非对称密钥进行加密,所以发送方应只掌握收方公钥,但由于gmssl库中使用SM2类实现加解密,因此定义SM2类时必须传公钥和私钥,会造成私钥泄露。
    • 问题2解决方案:在初始化SM2时不再假定使用同一个SM2类对象,而是只传输公钥给对方,在初始化加密SM2对象时默认私钥为空。

    其他(感悟、思考等)

    ​ 通过这次实验,让我复习了上次作业使用的网络编程技术,虽然上次的彩蛋中也有使用国密算法进行加密的过程,但是通过这次的实验,让我对非对称密钥加密算法有了更加深入的了解。虽然上次也使用了SM2算法,但由于默认密钥已提前交换好,相当于把私钥传给了对方。在这次实验中,我重新思考了加解密双方的公私钥关系,只传输公钥,保护了各自的私钥。

    ​ 总之,这次实验让我重温了之前学到的一些编程思路,也让我对Python和公钥密码体系有了进一步的了解,可谓收获满满。

    参考资料c

    - 《零基础学Python(全彩版)》

  • 相关阅读:
    python:dataclass装饰器详
    python : tuple 相加,注意逗号
    python itertools chain()
    Python classmethod 修饰符
    ILMerge
    a标签点击后页面显示个false
    Visual Studio自动生成XML类和JSON类
    元组简单示例
    jQuery插件示例笔记
    jQuery中的Ajax全局事件
  • 原文地址:https://www.cnblogs.com/swldeblog/p/12943548.html
Copyright © 2011-2022 走看看