百木园-与人分享,
就是让自己快乐。

20212217刘恒谦 实验三《Python程序设计》实验报告

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
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » 20212217刘恒谦 实验三《Python程序设计》实验报告

相关推荐

  • 暂无文章