20212217刘恒谦 《Python程序设计》实验三报告
代码链接:
服务器
客户端
课程:《Python程序设计》
班级: 2122
姓名: 刘恒谦
学号:20212217
实验教师:王志强
实验日期:2022年4月23日
必修/选修: 公选课
1.实验内容
利用socket进行网络通信,并在客户端读取文件,加密传输至服务端,服务端解密并保存。
2. 实验过程及结果
结合知乎上的资料,基本写出了socket制作服务器和客户端的代码。
服务器的代码如下(初级代码,只能在终端你说一句,我说一句)
`
import socket
HOST = \'\' #主机
PORT = 5050 #端口
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
#bind(address), 传输层为AF_INET时address是(主机host,端口port)格式
s.listen(2)
conn, addr = s.accept()
#conn新的套接字对象,用于接收发送数据,
# addr客户端地址为元组(hostname, port)
with conn: #while里面只能有recieve和send
print(\'Connected by\', addr)
while True: #server先接收再发送
data = conn.recv(1024)
print(f\"{addr}说:{data.decode()}\")
server_msg=input(\"请输入你想回复的内容,输入exit则退出:\\n\")
conn.sendall(server_msg.encode())
if server_msg==\"exit\":
break
`
客户端的代码如下(初级代码,只能在终端你说一句,我说一句)
`
# client.py
import socket
# HOST = \'localhost\'
HOST = \'192.168.10.191\'
PORT = 5050
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
while True: #while里面只能有send和recieve
msg=input(\"请输入你想传达的信息,传入exit则退出\\n\")
if msg==\"exit\":
break
# client先发送消息再接收
s.sendall(msg.encode())
data = s.recv(1024)
print(f\"他说 {data.decode()}\")
`
3. 实验过程中遇到的问题和解决过程
-
问题1:对加密算法了解太少
-
问题1解决方案:
上网查资料,了解到现代加密算法基本包括RSA,Hash,等算法,其中可解密的加密称双向加密。利用这个关键词,我又去网上查阅了大量资料,决定采用RSA加密算法。它赫赫有名,广为流行,使用较多,算法简单,解密困难。基本思路如下:
不同数据
可以用同样的字符排列组合来代表加密和解密只需要改变这个字符
RSA解密算法
N为字符总量,
(密文**D)%N=明文。
(D,N)称为私钥加密算法
(明文**E)%N=密文
(E,N)称为公钥D和E的制作
选取2个质数:p=3; q=11
质数相乘:N=p*q=33
计算欧拉函数 T=(p-1)(q-1)=20
选取公钥 1st.E是质数;2nd.1<E<T;3st.E不是T的因数
计算私钥 (D *E)%T=1
其他(感悟、思考等)
密码是门大学问,学习密码要有深厚的数学基础。当然落实到计算机上,代码功底也必不可少。
参考资料
- RSA加密和解密原理和过程
来源:https://www.cnblogs.com/cyber-explorer/p/socket-test.html
本站部分图文来源于网络,如有侵权请联系删除。