# 基于Kerberos的外卖系统 **Repository Path**: Cheney822/kerberos-based-delivery-system ## Basic Information - **Project Name**: 基于Kerberos的外卖系统 - **Description**: 程序模拟物理世界中外卖点餐的一套系统,用户的身份认证由KDC提供,点餐、送餐等功能由外卖服务器提供。普通用户可以在平台点餐,配送员可以在平台接单送餐、商家可以在平台商家自己的餐品。 程序采用并行的设计,各服务器均能同时处理来自不同类别的多个客户端的不同请求。程序设计了一个应用层协议,运行在不同机器上的客户端/服务器通过应用层协议交互。 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-03-28 - **Last Updated**: 2022-06-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 网络安全课程设计文档 ## 环境 | 包名称 | 版本号 | 说明 | | :-------------: | :----: | :------------------------------: | | python | 3.8.13 | | | pymysql | 1.0.2 | 连mysql数据库 | | redis | 4.2.2 | 连接redis数据库 | | tkinter | | 做UI界面 | | ttkbootstrap | 1.7.6 | 美化界面 | | base64 | | base64加密 | | hashlib | | Hash.py 对其进行了二次封装 | | traceback | | log模块获取调用层级/获取error类型 | | datetime | | 处理时间 | | os | | 判断目录/文件是否存在 | | socket | | 收发报文 | | threading | | 多线程 | | multiprocessing | | 多进程 | | random | | 随机模块 | ## 模块结构 > 公共文件外提供的接口 ```python network-security ├── des2.py │   ├── encrypt(plaintext: str, key: int) -> str:加密函数 │   ├── decrypt(secrettext: str, key: int) -> str:解密函数 │   └── def newkey() -> int:获取一个64 bit的密钥 ├── rsa2.py │   ├── newkeys(nbits: int, e: int = 65537): │   ├── encrypt(message: str, _pub_key: PublicKey, _coding: str = "utf-8") -> str:加密 c = m^e mod n │   └── decrypt(crypto: str, _priv_key: PrivateKe, _coding: str = "utf-8") -> str: 解密 m = c^d mod n ├── hash.py │ └── encrypt(plaintext: str, salt: str = "cug", _coding: str = "utf-8") -> str: 用hash的方法对原文进行摘 ├── log.py │   └── debug(content: str, path: str = "./", log_name: str = "log.txt") -> bool:将传入的内容格式化的输出日志文件到指定的文件 ├── packet.py │   ├── get_pack(pac_type, sign="none"... ...) -> bytes:将指定的各字段的值组合成定长的报文头部(可直接进行数字签名) │   └── class pack(self, sec_packet, sessionkey=... ... ):根据传入的报文实例化出一个含有报文各个字段的对象(可验证数字签名) ├── packet.py │   ├── send(_sock: socket.socket, packet: bytes, sessionkey... ... ack_flag: bool = False,) -> int:对socket的再次封装,对使用了上述应用层协议的报文实现大报文的收发、验证ack以实现双向不可否认 │   ├── recv(_sock: socket.socket, sessionkey... ... head_size: int = 168, ack_flag: bool = False) -> pack:和send对应的收报文的函数 └ └── flush(_sock: socket.socket) -> bool:刷新socket缓冲区的函数 ```