# SignedPub项目结构
- 客户端
- Electron 项目包
- Electron 相关 Node 库
- Django 后端
- Vue 前端(生成静态文件给 Django 使用)
- Vue相关 Node 库
- Django 静态文件夹
- 服务器
- 服务器后端 Django 项目
## 项目运行
首先确保 node 库安装完成,前端需要在 Vue 文件夹内将前端所需库下载下来。然后是 Electron 的所需要的库。
然后 Django 所需的库需要用 Python 下载
### 注意事项
Django 关闭 Debug 模式后可能会找不到静态文件
## 数据库设计
用户数据库设计
| 参数 | 备注 |
| ------------ | -------------------------- |
| userid | 用户ID,由服务器随机发放。 |
| username | 用户名,用户注册时使用。 |
| IdentityPub | 用户公钥的一种。 |
| SignedPub | 用户公钥的一种。 |
| OneTimePub | 用户公钥的一种。 |
| EphemeralPub | 用户公钥的一种。 |
| IdentityPri | 用户私钥的一种。 |
| SignedPri | 用户私钥的一种。 |
| OneTimePri | 用户私钥的一种。 |
| EphemeralPri | 用户私钥的一种。 |
用户数据库是本地存储用户相关信息的数据库,如果是登陆过的用户或者是本机注册用户,则会存储私钥在本地,如果登录用户在本机没有存储私钥,会在登录时提醒,用户在输入私钥后会在本地进行计算,计算出公钥后会与服务器上存储的公钥进行对比,如果一致则说明输入的私钥正确,会将其转码后存储在数据库中,并完成登录。
好友关系数据库设计
| 参数 | 备注 |
| ------------ | -------------------------------------- |
| userid | 用户ID,由服务器随机发放。 |
| whosfriend | 用户ID,用于鉴别本机不同用户的好友。 |
| username | 用户名,该好友的用户名。 |
| remark | 备注 |
| status | 好友当前状态,用于区分是否为正式好友。 |
| IdentityPub | 好友公钥之一 |
| SignedPub | 好友公钥之一 |
| OneTimePub | 好友公钥之一 |
| EphemeralPub | 好友公钥之一 |
好友关系数据库是本地存储用户好友的相关信息的数据库,仅存储好友的公钥信息,由于想要达到一种离线消息的效果,好友是指用户单方面添加的好友,添加好友后会从服务器获取好友的公钥信息,添加好友信息到数据库中,然后即可发送消息。在对方登录后,会从服务器中获取到用户发送的消息,但是判断并非是已添加的好友,会先将对方的公钥信息添加到好友数据库中,但是status值设置为0表示并非正式好友。但是由于已经获取到了对方的公钥信息,可以及时对目标消息进行解密,以免造成消息漏收等错误。这类非正式好友会在好友列表中显示并提示是否添加或删除,只有在添加了好友后才可读取目标发送的消息。
消息保存数据库设计
| 参数 | 备注 |
| ------------ | ------------------------------------------------------------ |
| message_id | 消息记录编号。 |
| fromUserid | 消息源用户ID |
| toUserid | 消息目标用户ID |
| kdf_next | KDF函数的下一次输入,用于密钥生成。 |
| date | 消息时间。 |
| plaintext | 消息明文。 |
| EphemeralPri | 本次消息使用的本机用户的临时私钥。若该消息是从他人接收,则不会有私钥。 |
| EphemeralPub | 当前消息使用的本机用户的临时公钥。若该消息是接收消息,存储对方的临时公钥,用于解密他人消息。若该消息是发送消息,则存储自己的公钥,在后续发送过程中并不会使用该公钥。 |
消息数据库是本次设计的主要数据库,存储本地所有来回消息,通过这些来回的消息,可以实现消息的链式加密和解密。完成双棘轮加密设计。在本次系统设计中,加密环节是通过双棘轮加密实现的,双棘轮即临时公钥步进棘轮和KDF链棘轮。临时公钥棘轮通过消息发送方生成随机密钥对,将该密钥对的公钥附在消息包中,使用私钥对目标的上一次发送消息到己方的公钥进行DH算法获取KDF的输入和输出,输出将会分成前后两节供加密和下一次加密使用。在加密过程中,会首先获取与目标的上一次发送消息和上一次接收消息,并通过消息中的临时公钥和kdf_next属性来对消息进行加密。在解密过程中,也会获取与目标的上一次发送消息和上一次接收消息,获取消息中的临时私钥和kdf_next加上解密消息包中的临时公钥来对消息进行解密。解密完成后会返回前端并由前端提出存储消息的请求,将该次解密完成的消息明文以及对方的公钥、下一次的KDF值保存在数据库中,然后前端刷新消息列表并重新渲染页面。
服务器端用户数据库设计
| 参数 | 备注 |
| ------------ | ------------------------------ |
| userid | 用户ID,注册时服务器随机生成。 |
| username | 用户名,用户注册时自定义。 |
| password | 登录密码的HASH值。 |
| IdentityPub | 用户公钥的一种 |
| SignedPub | 用户公钥的一种 |
| OneTimePub | 用户公钥的一种 |
| EphemeralPub | 用户公钥的一种 |
对于服务器来说,用户数据库是用来登录和对用户身份检验的方式。用户通过获取目标用户的公钥进行加密通讯。用户在登录时会比对password,如果用户本机没有私钥存在会要求用户输入私钥并使用服务器上的公钥对用户提供的私钥进行验证。
服务器端消息数据库设计
| 参数 | 备注 |
| ---------- | -------------------- |
| fromUserid | 消息源用户ID |
| toUserid | 消息目标用户ID |
| date | 消息存入服务器的时间 |
| ciphertext | 消息包与密文的整合。 |
消息数据库是为用户提供暂存消息服务,通过对用户的身份验证返回其他人发送给用户的消息,然后会删除发送过的消息,保证消息的唯一性。
## 功能设计
- 用户注册功能设计
| 功能 | 参数 | 备注 |
| -------- | :---------------- | ------------------------------------------------------------ |
| 用户注册 | usernam、password | 通过username和设定password,将username和hash后的password发送到服务器,服务器随机未使用的8位数字作为用户的ID和登录凭据并返回给用户。 |
用户在注册时只需提供username和password,但是前端会向本地后台申请4对新的密钥对,并将公钥与username、password一并发送到服务器,服务器随机8位数字作为用户ID,保存其用户ID、username、hash(password)、4对用户公钥到服务器用户数据库中,成功后返回注册成功的ID给用户用于登录账号。
![注册成功](./imgs/image-20200323142101172.png)
- 用户登录功能设计
| 功能 | 参数 | 备注 |
| -------- | ---------------- |
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
项目结构: 客户端: Electron 项目包 Electron 相关 Node 库 Django 后端 Vue 前端(生成静态文件给 Django 使用) Vue相关 Node 库 Django 静态文件夹 服务器 服务器后端 Django 项目 运行: 首先确保 node 库安装完成,前端需要在 Vue 文件夹内将前端所需库下载下来。然后是 Electron 的所需要的库。 然后 Django 所需的库需要用 Python 下载
资源推荐
资源详情
资源评论
收起资源包目录
e2eapp-master.rar (64个子文件)
app
djangoapp
db.sqlite3 152KB
backend
__init__.py 0B
tests.py 60B
admin.py 63B
apps.py 89B
models.py 3KB
urls.py 974B
X3DH.py 12KB
views.py 33KB
frontend
.editorconfig 147B
src
App.vue 408B
assets
logo.png 7KB
index.css 3KB
main.js 494B
components
Login.vue 15KB
Index.vue 24KB
router
index.js 341B
.flowconfig 58B
.babelrc 258B
package.json 2KB
build
check-versions.js 1KB
logo.png 7KB
utils.js 3KB
vue-loader.conf.js 553B
webpack.prod.conf.js 5KB
build.js 1KB
webpack.base.conf.js 2KB
webpack.dev.conf.js 3KB
package-lock.json 436KB
.postcssrc.js 246B
index.html 270B
.gitignore 159B
static
.gitkeep 0B
README.md 465B
config
prod.env.js 61B
index.js 2KB
dev.env.js 156B
manage.py 629B
djangoapp
__init__.py 0B
wsgi.py 395B
urls.py 919B
settings.py 4KB
asgi.py 395B
log
logging.log 29KB
readme.md 24KB
requirements.txt 1KB
.gitignore 185B
server
db.sqlite3 148KB
backend
__init__.py 0B
tests.py 60B
admin.py 63B
migrations
__init__.py 0B
0001_initial.py 1KB
apps.py 89B
models.py 1KB
urls.py 273B
views.py 6KB
manage.py 626B
server
__init__.py 0B
wsgi.py 389B
urls.py 800B
settings.py 4KB
asgi.py 389B
log
logging.log 46KB
共 64 条
- 1
资源评论
- 2301_765122392024-01-25资源和描述一致,质量不错,解决了我的问题,感谢资源主。
十小大
- 粉丝: 9796
- 资源: 2556
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功