# Uchat——基于python的安全即时通讯系统
## tips
请不要在同一目录下运行服务端与客户端,否则会因为密钥冲突产生类型错误。即请分别运行服务端与客户端。
## 目的
设计完成简易的安全即时通讯系统,实现类似于QQ的聊天软件;
## 需求分析
### 功能需求
1. 聊天客户端
1. 注册:用户与集中服务器通信完成注册,包括用户名、密码、邮箱、性别、年龄、数字证书等信息传输,其中数字证书包含公钥、用户名、邮箱等信息。私钥单独保存在客户端一个文件夹下不进行传输;能显示用户名、邮箱不符合格式规范或者重复,空输入等错误信息。
2. 认证登录:客户端与集中服务器通信完成用户名、口令认证登录;能显示用户名、密码错误导致的登录错误信息。还有已登录账号再次登录时的多重登录检验,并将之前登陆的账号顶下去。
3. 好友管理:用户可通过服务器进行搜索、添加、删除好友。
4. 即时通信:用户通过客户端实现与好友的聊天,包括文字、图片传输。文字可实现字体颜色和大小的改变。
5. 聊天记录:客户端能够保存聊天记录并且可以查看聊天记录。
6. 消息加解密:采用D-H体制协商加密秘钥,用对称密码AES算法进行加解密。
7. 消息摘要:使用MD5算法实现消息摘要认证功能,确保发送消息的完整性。
8. 用户未读消息提醒:红点标注未读消息数目,并按最后发送消息时间排列好友列表。
9. 用户离线后消息处理:用户上线后及时接收到离线时好友发送的消息。
功能结构图
![](https://leeyuxun-1258157351.cos.ap-beijing.myqcloud.com/img/20200714124535.png)
2. 集中服务器
1. 用户注册:与用户通信完成注册,对用户名和邮箱格式、是否重复,输入不规范等做必要的检验,接收客户端的数字证书,发送服务端数字证书。
2. 登录验证:用户登录时,验证用户名和密码是否正确,并向客户端返回登录结果。如信息正确,就将在线好友用户发给该用户,将该用户的状态发给各在线好友用户,同时在服务器端显示出来。
3. 用户公钥,证书提供:用户向好友发送消息时,与服务器建立安全连接获取好友的证书信息,服务器控制client.socket像好友用户发送信息,实现用户之间的通信。
4. 用户在线状态维护:当用户在线时,记录保存用户的在线状态、IP地址、端口号。
5. 用户消息列表实时发放:由监听函数将操作实时加入到执行函数列表中递归执行。向用户发送其好友列表的在线离线情况,包括好友用户名、IP地址、端口号。并按照最后发消息的时间对好友消息列表进行排序。
功能结构图
![](https://leeyuxun-1258157351.cos.ap-beijing.myqcloud.com/img/20200714124653.png)
3. 高级功能
1. 离线用户消息通知:暂时存储离线用户的消息,用户上线后,显示未读的消息并用红点标注;
2. 好友在线离线功能实时更新;
3. 限制账号只能一处登录:一个账号只能在一处登录,在别处登录时会把原先的登录踢下线;
4. 支持群聊功能:可以创建群聊,并根据群号加入群聊;
5. 聊天时字体大小颜色可更改;
6. 支持聊天各类图像文件的缓存。
### 数据需求
1. 客户端
客户端登录后加过的好友和加入的群聊需要从数据库中调出信息并在前端反馈呈现出来。客户端的聊天记录可以存储在数据库中,用到时直接读取返回消息历史。
2. 集中服务器
1. users表:用户信息表,存储用户基本信息,包括用户ID(id)、用户名(username)、密码(password)、电子邮箱(email)、用户登录IP地址(ip)、用户登录端口(port)、性别(sex)、年龄(age)、公钥(pk)。
| 名称 | 数据类型 | 主键 | 是否唯一 | 是否为空 | 备注 |
| -------- | -------- | ---- | -------- | -------- | -------- |
| id | INTEGER | Y | Y | N | 用户id |
| username | TEXT | N | Y | N | 用户名 |
| password | TEXT | N | Y | N | 密码 |
| email | TEXT | N | Y | N | 邮箱 |
| ip | TEXT | N | Y | N | 登录IP |
| port | TEXT | N | Y | N | 登录端口 |
| sex | TEXT | N | Y | N | 性别 |
| age | TEXT | N | Y | N | 姓名 |
| pk | TEXT | N | Y | N | 公钥 |
2. friends表:存储用户的好友信息,包括用户id(from_user_id)、好友id(to_user_id)、加好友请求是否接受(accepted)。
| 名称 | 数据类型 | 主键 | 是否唯一 | 是否为空 | 备注 |
| ------------ | -------- | ---- | -------- | -------- | -------- |
| from_user_id | INTEGER | Y | Y | N | 本人ID |
| to_user_id | INTEGER | Y | Y | N | 好友ID |
| accept | BOOLEAN | N | N | N | 接受状态 |
3. chat_history表:存储好友的聊天记录,包括发送方ID(user_id)、接收方(target_id)ID(target_type)、聊天数据(data)(BLOB类型存储二进制大对象,可以实现文件数据的直接存储),sent(用于标识消息是否已发送,若未发送,先存储这个操作,在某一次事件再次触发时检查标志位,操作服务端再次控制client.socket发送消息)。
| 名称 | 数据类型 | 主键 | 是否唯一 | 是否为空 | 备注 |
| ----------- | -------- | ---- | -------- | -------- | ----------------- |
| id | INTEGER | Y | Y | N | 消息ID |
| user_id | INTEGER | N | N | N | 用户ID |
| target_id | INTEGER | N | N | N | 消息目标ID |
| target_type | TEXT | N | N | N | 目标类型:群/用户 |
| data | BLOB | N | N | N | 消息体 |
| sent | BOOLEAN | N | N | N | 发送是否成功 |
4. rooms表:群组表,包括该群组的主键ID(id)、群组的名称(room_name)。
| 名称 | 数据类型 | 主键 | 是否唯一 | 是否为空 | 备注 |
| --------- | -------- | ---- | -------- | -------- | ------ |
| id | INTEGER | Y | Y | N | 群聊ID |
| room_name | TEXT | N | Y | N | 群聊名 |
5. room_user表:群组用户表,包括群组的ID,群聊房间号(room_id)、加入该群组的用户(user_id)。
| 名称 | 数据类型 | 主键 | 是否唯一 | 是否为空 | 备注 |
| ------- | -------- | ---- | -------- | -------- | ------ |
| id | INTEGER | Y | Y | N | ID |
| room_id | INTEGER | N | N | N | 群聊ID |
| user_id | INTEGER | N | N | N | 用户ID |
### 性能需求
1. 可靠性需求
保证一个用户只能同时使用一个IP地址登录,客户端不会出现闪退、加密无效的情况。
2. 安全性需求
客户端做好完整的封装;传输信息采用经过公钥加密机制协商的AES对称加密秘钥;服务器及时更新客户端IP地址等信息。
3. 可维护性与可扩展性需求
对于软件功能方面,采用高内聚低耦合的模块化设计,包括登录模块、注册模块、好友列表模块、聊天模块等,确保每个模块的具有较高的独立性,使软件源码便于维护,同时便
没有合适的资源?快使用搜索试试~ 我知道了~
安全技术课程设计基于python的安全即时通讯系统全部资料.zip
共52个文件
py:42个
gif:3个
png:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 87 浏览量
2022-11-25
13:06:22
上传
评论 7
收藏 756KB ZIP 举报
温馨提示
安全技术课程设计基于python的安全即时通讯系统全部资料.zip 功能需求 聊天客户端 注册:用户与集中服务器通信完成注册,包括用户名、密码、邮箱、性别、年龄、数字证书等信息传输,其中数字证书包含公钥、用户名、邮箱等信息。私钥单独保存在客户端一个文件夹下不进行传输;能显示用户名、邮箱不符合格式规范或者重复,空输入等错误信息。 认证登录:客户端与集中服务器通信完成用户名、口令认证登录;能显示用户名、密码错误导致的登录错误信息。还有已登录账号再次登录时的多重登录检验,并将之前登陆的账号顶下去。 好友管理:用户可通过服务器进行搜索、添加、删除好友。 即时通信:用户通过客户端实现与好友的聊天,包括文字、图片传输。文字可实现字体颜色和大小的改变。 聊天记录:客户端能够保存聊天记录并且可以查看聊天记录。 消息加解密:采用D-H体制协商加密秘钥,用对称密码AES算法进行加解密。 消息摘要:使用MD5算法实现消息摘要认证功能,确保发送消息的完整性。 用户未读消息提醒:红点标注未读消息数目,并按最后发送消息时间排列好友列表。 用户离线后消息处理:用户上线后及时接收到离线时好友发送的消息。
资源推荐
资源详情
资源评论
收起资源包目录
安全技术课设项目.zip (52个子文件)
safechat-master
client
forms
images
login_bg.gif 156KB
contacts_bg.gif 115KB
VerticalScrolled.png 124KB
contacts_bg.png 200KB
register_bg.gif 101KB
register_form.py 9KB
contacts_form.py 11KB
login_form.py 5KB
__init__.py 44B
chat_form.py 11KB
memory
__init__.py 603B
__init__.py 886B
components
contact_item.py 2KB
__init__.py 46B
vertical_scrolled_frame.py 2KB
util
socket_listener
__init__.py 5KB
__init__.py 44B
server
event_handler
register.py 1KB
add_friend.py 2KB
bad.py 332B
send_message.py 3KB
del_friend.py 2KB
create_room.py 720B
query_room_users.py 791B
__init__.py 1KB
login.py 2KB
resolve_friend_request.py 1KB
client_echo.py 385B
join_room.py 896B
memory
__init__.py 697B
__init__.py 5KB
broadcast
__init__.py 242B
database.db 0B
main.sql 1KB
util
database
__init__.py 4KB
__init__.py 156B
run_server.py 72B
run_client.py 72B
common
transmission
secure_channel.py 5KB
__init__.py 44B
global_vars.py 111B
__init__.py 44B
message
__init__.py 7KB
config.py 231B
util
__init__.py 1KB
socket_linstener
__init__.py 5KB
cryptography
prime.py 639B
crypt.py 1KB
__init__.py 44B
requirements.txt 210B
README.md 50KB
config.json 508B
共 52 条
- 1
资源评论
- m0_700643582023-10-03资源值得借鉴的内容很多,那就浅学一下吧,值得下载!
程序员张小妍
- 粉丝: 1w+
- 资源: 3255
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功