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文档
腾讯元宝

浙公网安备 33010602011771号