# electron_dict **Repository Path**: byyxcyy/electron_dict ## Basic Information - **Project Name**: electron_dict - **Description**: 命令行式 电子字典, 方便查询英语单词,单词共计1.9w个,采用mysql数据存储 - **Primary Language**: Python - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-01-22 - **Last Updated**: 2023-01-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 功能说明 > 用户可以登录和注册 * 登录凭借用户名和密码登录 * 注册要求用户必须填写用户名,密码,其他内容自定 * 用户名要求不能重复 * 要求用户信息能够长期保存 > 可以通过基本的图形界面 print 以提示客户端输入。 * 程序分为服务端和客户端两部分 * 客户端通过print打印简单界面输入命令发起请求 * 服务端主要负责逻辑数据处理 * 启动服务端后应该能满足多个客户端同时操作 > 客户端启动后即进入一级界面,包含如下功能:登录 注册 退出 * 退出后即退出该软件 * 登录成功即进入二级界面,失败回到一级界面 * 注册成功可以回到一级界面继续登录,也可以直接用注册用户进入二级界面 > 用户登录后进入二级界面,功能如下:查单词 历史记录 注销 * 选择注销则回到一级界面 * 查单词:循环输入单词,得到单词解释,输入特殊符号退出单词查询状态 * 历史记录:查询当前用户的查词记录,要求记录包含name word time。可以查看所有记录或者前10条均可。 ### 结构示意 > 技术方案 * 基于tcp套接字 * 多进程并发 * 历史记录: 前10条 * 注册成功, 直接登录 > 数据表建立 * 数据库(dict) * 字典表(words) -> 字典文件位于当前目录下的dict.txt文档 * 用户 表(user) -> 字段(id name password) ```sql create table user (id int primary key auto_increment, name varchar(32) not null, passwd varchar(128) not null); ``` * 历史记录 表(hist) -> 字段(id name word time) ```sql create table hist (id int primary key auto_increment, name varchar(32) not null, word varchar(28) not null, time datetime default now()); ``` > 结构设计 * 客户端 * 服务端: 逻辑请求处理, 数据库操作处理 * 函数封装: 直接写一个功能程序提供给使用者,使用者直接运行,而不是需要使用作者代码的某一部分,简而言之,言而简之,怎么方便怎么来 > 功能分析和通讯搭建 * 并发通讯 * 登录 L 客户端: 输入账号密码, 加密, 发送请求, 得到反馈 服务器: 接收请求, 验证密码, 返回结果 * 注册 R 客户端:输入注册信息,加密,发送请求,得到反馈 服务端:接收请求,是否允许注册,用户信息存入信息库,返回结果 * 查单词 Q 客户端: 输入单词,发送请求,得到反馈 服务器: 接收请求,操作数据库,返回结果, 插入历史记录 * 历史记录 H * 退出 Q * 模块, getpass: 必须在命令行中才能生效, 输入隐藏, 用于密码输入 * 模块, hashlib: 哈希加密, 明文转换加密 ```python # 原理 pwd = getpass.getpass("password:") # 输入隐藏,与intput功能一样,多了一个隐藏功能 # 哈希加密 hash = hashlib.md5() # 实例化哈希加密对象 hashx.update(pwd.encode()) # 算法加密 pwd = hash.hexdigest() # 加密后的密码,即使第三方截获了该密码,也无法知道该密码的明文! # 攻防 -> 算法加盐 用户密码: qwe123 # 加盐: 用户名+随机密码 hash_ = hashlib.md5(('用户名'+"*#06091ki.").encode()) s = 用户密码 + hash_ # 即使回推成功,也无法登录 # 世上无绝对安全, 道高一尺魔高一丈...... ``` > 功能逻辑