20242312 2024-2025-2 《Python程序设计》实验三报告

20242312 2024-2025-2 《Python程序设计》实验三报告

课程:《Python程序设计》
班级: 2423
姓名: 周梓濠
学号:20242312
实验教师:王志强
实验日期:2025年4月16日
必修/选修: 公选课

1.实验内容

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

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

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

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

2. 实验过程

(1)创建服务端和客户端及其联系

服务端相关代码及注释:

# 新建服务端Socket

#实验数据:172.20.10.9 #一般:localhost

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

address = ('172.20.10.9', 8888)

# 绑定

server_socket.bind(address)

# 监听

server_socket.listen(5)

print("开始监听....", address)

# 接受客户端连接

client_socket, address = server_socket.accept()

print("我们收到{}的连接".format(address))

客户端相关代码及注释:

# 新建Socket,实例化

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接服务器

#实验数据:172.20.10.9 #一般:localhost

client_socket.connect(('172.20.10.9', 8888))

(2)文件操作

服务端文件操作及注释:

# 将解密后的内容保存到文件

with open("server_output.txt", "w", encoding="utf-8") as file:

file.write(decrypted_message)

客户端文件操作及注释:

# 从文件读取内容

with open("client_input.txt", "r", encoding="utf-8") as file:

message = file.read()

这里文件操作是询问ai的(因为当时还没学文件操作),我又继续追问ai代码的意思,以下是不懂之处的个人总结:

with :上下文管理器,确保文件操作结束后自动关闭文件
file.read():一次性读取文件的全部内容

(3)加解密操作

客户端加密操作代码及注释:

# 加密密钥,必须是16、24或32字节

key = b'1234567891234567'

# 初始化向量,必须是16字节

iv = b'1234567891234567'

  

def encrypt_message(message):

cipher = AES.new(key, AES.MODE_CBC, iv)

encrypted = cipher.encrypt(pad(message.encode('utf-8'), AES.block_size))

return iv + encrypted

# 加密消息

encrypted_message = encrypt_message(message)

client_socket.send(encrypted_message)

服务端解密操作代码及注释:

# 加密密钥,必须是16、24或32字节

key = b'1234567891234567'

# 初始化向量,必须是16字节

iv =b'1234567891234567'

  

def decrypt_message(encrypted_message):

iv = encrypted_message[:AES.block_size]

encrypted = encrypted_message[AES.block_size:]

cipher = AES.new(key, AES.MODE_CBC, iv)

decrypted = unpad(cipher.decrypt(encrypted), AES.block_size)

return decrypted.decode('utf-8')

# 解密消息

decrypted_message = decrypt_message(encrypted_message)

print("客户端说:", decrypted_message)

这里函数是老师提供的代码,我没看懂,我让ai通俗易懂地向我解释,以下是ai的回答:



经过ai的解释,我理解了上述函数的意思

(4)程序代码托管至码云

https://gitee.com/chow2312/Python/tree/master/Code

3. 实验结果

1.将服务端、客户端代码和txt文件放在同个文件夹中:

2.客户端加密前文件内容:

3.终端运行结果:

4.服务端解密后文件内容:

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

问题一:

程序第一次运行时给我这样报错

解决方案:询问元宝,它告诉我是AES加解密的密钥有问题,我便把第一次设置的密钥发给它:
key = 1234567891234567
iv = 1234567891234567
它告诉我,我这样key和iv的类型是字符串类型,而非字节类型,需添加前缀b直接声明为字节,才符合16字节的要求!

5.参考资料

王志强老师学习通word文档
腾讯元宝

posted @ 2025-05-07 21:05  chow-  阅读(43)  评论(0)    收藏  举报