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(全彩版)》

posted @ 2020-05-23 17:28  浩夜星空  阅读(217)  评论(0编辑  收藏