编程思路:
- 客户端和服务器端建立连接
- 客户端产生非对称密钥,将公钥传送给服务器端
- 服务器端通过公钥将密钥进行加密并传送给客户端
- 客户端接收到密钥并进行解密,双方开始通信
背景资料:
- AES原理(图解密码技术第三章)
- RSA原理(图解密码技术第五章)
- Socket通信原理
代码部分
注释已经非常详细了,这里就不再赘述。
异常类定义
class AuthenticationError(Exception):
def __init__(self, Errorinfo):
super().__init__()
self.errorinfo = Errorinfo
def __str__(self):
return self.errorinfo
服务器端代码
服务器类定义:
import socket
import rsa
import pickle
from cryptography.fernet import Fernet
import hashlib
from errorclass import AuthenticationError
import time
# 使用图灵机器人的自动回复功能
from tlrobot import get_reply
class Server:
# 用来标记同时连接的客户端的数量
number = 0
# 默认的最大等待数量为5
# 默认使用本机的ip地址和8080端口
def __init__(self, backlog=5, addr=('localhost', 8080)):
# 默认使用AF_INET协议族,即ipv4地址和端口号的组合以及tcp协议
self.serverSocket = socket.socket()
# 绑定监听的ip地址和端口号
self.serverSocket.bind(addr)
# 开始等待
self.serverSocket.listen(backlog)
# 该函数需要并行处理
def link_one_client(self):
# 获取客户端对象和客户端地址
clientSocket, addr = self.serverSocket.accept()
# 客户端数量加1
Server.number = Server.number + 1
# 标记当前客户端编号
now_number