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

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

课程:《Python程序设计》
班级: 2134
姓名: 冯旷霖
学号:20213408
实验教师:王志强
实验日期:2022年5月3日
必修/选修: 公选课

1.实验内容

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

2. 实验过程及结果

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

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

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

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

服务器端

import socket
import base64
from Crypto.Cipher import AES


def add_to_16(value):
    while len(value) % 16 != 0:
        value += '\0'
    return str.encode(value)  

def encrypt(key, text):
    aes = AES.new(add_to_16(key), AES.MODE_ECB)  
    encrypt_aes = aes.encrypt(add_to_16(text))  
    encrypted_text = str(base64.encodebytes(encrypt_aes), encoding='utf-8')  
    return encrypted_text

def decrypt(key, text):
    aes = AES.new(add_to_16(key), AES.MODE_ECB)  
    base64_decrypted = base64.decodebytes(text.encode(encoding='utf-8'))  
    decrypted_text = str(aes.decrypt(base64_decrypted), encoding='utf-8').replace('\0', '')  
    return decrypted_text
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('127.0.0.1',8001))
s.listen()
conn,address=s.accept()
data=conn.recv(1024)
data=data.decode()
data = decrypt('fkl',data)
print(data)
conn.sendall(("服务器已经收到接受内容:"+data).encode())
s.close()

客户端

import socket
import base64
from Crypto.Cipher import AES


def add_to_16(value):
    while len(value) % 16 != 0:
        value += '\0'
    return str.encode(value)  

def encrypt(key, text):
    aes = AES.new(add_to_16(key), AES.MODE_ECB)  
    encrypt_aes = aes.encrypt(add_to_16(text))  
    encrypted_text = str(base64.encodebytes(encrypt_aes), encoding='utf-8')  
    return encrypted_text

def decrypt(key, text):
    aes = AES.new(add_to_16(key), AES.MODE_ECB)  
    base64_decrypted = base64.decodebytes(text.encode(encoding='utf-8'))  
    decrypted_text = str(aes.decrypt(base64_decrypted), encoding='utf-8').replace('\0', '')  
    return decrypted_text
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(('127.0.0.1',8001))
file1=open("1.txt","r+",encoding="GBK")
file1.write("hello!!!!!!!")
file1.close()
file1=open("1.txt","r",encoding="GBK")
str1=file1.readlines()
file1.close()
#str=input("请输入要传输的内容;")
#s.sendall(str.encode())
key1 = 'fkl'
str1 = encrypt(key1,str(str1))
s.sendall(str1.encode())
data=s.recv(1024)
print(data.decode())
s.close()

测试截图

上传Gitee截图

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

  • 问题1:按照上课讲的代码文件无法打开
  • 问题1解决方案:新增一个1.txt的文件
  • 问题2:无法在电脑中找到Crypto.Cipher模块
  • 问题2解决方案:在同学的帮助下在win+R中下载模块
posted @ 2022-05-03 22:35    阅读(37)  评论(0编辑  收藏  举报