20221211王澜2022-2023-2《python程序设计》实验三报告(重做版)

学号 2022-2023-2 《Python程序设计》实验x报告

课程:《Python程序设计》
班级:2212

姓名:王澜

学号:20221211
实验教师:王志强
实验日期:2020年4月20日
必修/选修: 公选课

1.实验内容

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

(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;

(2)要求包含文件的基本操作,例如打开和读写操作。

(3)要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。

(4)程序代码托管到码云。

注:在华为ECS服务器(OpenOuler系统)和物理机(Windows/Linux系统)上使用VIM、PDB、IDLE、Pycharm等工具编程实现。

2. 实验过程及结果

(一)客户端代码

from DesModule import des_encrypt
from DesModule import des_descrypt
import socket
import os

if os.path.exists("D:\python作业\实验三\对话.txt"):
    file1=open("对话.txt","a+")
else:
    file1=open("对话.txt","w+")
file1.write("Do you love watching TV?")
file1.seek(0)
cryptostring = file1.readline()
text = des_encrypt(cryptostring,"12345678")
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("172.20.10.6",8000))
s.sendall(text.encode())
data=s.recv(1024)
print("解密前:",data.decode())
plaintext=des_descrypt(data.decode(),"12345678")
print("接受的数据:",plaintext)
file1.write(plaintext)
file1.close()
s.close()

(二)服务端代码

import socket
import os
from DesModule import *

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("172.20.10.6", 8000))
s.listen()
conn, address = s.accept()
data = conn.recv(1024)
ciphertext = des_encrypt("buchi", "12345678")
print("解密前", data.decode())
plaintext = des_descrypt(data, "12345678")
print("来自客户端的信息是", plaintext)
if os.path.exists("D:\python作业\实验三\对话.txt"):
    file = open("对话.txt", 'a+')
    file.write(plaintext)
else:
    file = open("对话.txt", 'w+')
    file.write(plaintext)
    file.seek(0)
file.close()
conn.sendall(ciphertext.encode())

(三)加密代码

from pyDes import *
import binascii
def des_encrypt(s, KEY):
    secret_key = KEY
    iv = secret_key
    k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)
    en = k.encrypt(s, padmode=PAD_PKCS5)
    return binascii.b2a_hex(en).decode()
def des_descrypt(s, KEY):
    secret_key = KEY
    iv = secret_key
    k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)
    de = k.decrypt(binascii.a2b_hex(s), padmode=PAD_PKCS5)
    return de.decode()
if __name__ == "__main__":
    ciphertext = des_encrypt("hello, world!", "12345678")
    print("密文:",ciphertext)
    plaintext = des_descrypt(ciphertext, "12345678")
    print("解密后的明文:", plaintext)

(四)运行结果

 

 

 (五)上传至码云

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

  • 问题1:端口始终不正确,要么是计算机积极拒绝、要么是一个端口只允许一次、要么是远程已帮忙关闭一个端口,始终无法传输信息
  • 问题1解决方案:更换ip地址,使用个人手机热点,远离校园网,更换手机热点的ip地址,就成功传输了。
  • 问题2:出现bug,显示只能和已编码的数据传输。
  • 问题2解决方案:后来发现中文不能传输,改成英文加拼音的形式就好。

其他(感悟、思考等)

这个实验我一次提交是4月份,那个时候被python和计算机吓怕了,在上一个帖子中并没有成功得到实验结果,打算后来再提交一个成功的,一直拖到现在,稍微放下了点对编程的畏惧,在寻求了室友的帮助下,成功解决了一直困惑我的疑难杂症。

参考资料

解密des

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值