base on # SeCloud - 安全与便捷的网盘应用
## 项目简介
SeCloud 是一款集 **安全认证**、**加密传输** 和 **加密存储** 于一体的高级网盘应用。通过创新的密码学设计和自主开发的通信协议,SeCloud 致力于保护用户隐私,确保服务器无法窃取任何用户数据。SeCloud 提供了与传统网盘类似的便捷使用体验,同时构建了顶级的安全保障体系。
## 主要功能
- **文件管理**:支持文件上传、下载、删除、文件夹创建等基本操作。
- **高级加密**:基于 U 盾硬件,采用层级密钥管理,实现“一次一密”策略。
- **端到端安全传输**:采用 DH 密钥交换协议和数字证书,确保通信数据全程加密。
- **共享网盘**:安全设计的文件共享功能,保证密钥安全传输与存储。
- **多重认证**:结合口令和硬件(U 盾)双重保护。
## 技术亮点
- **用户中心的加密架构**:服务器无法解密用户数据。
- **一次一密加密策略**:文件加密密钥独立,泄露风险最小化。
- **跨平台支持**:基于 Electron 打造,兼容 Windows、macOS 和 Linux。
- **易扩展性**:系统设计模块化,支持后续功能扩展。
## 安装与运行
SeCloud 由三部分组成:**服务器 (server)**、**客户端后端 (client)** 和 **客户端前端 (frontend)**。每个部分均需独立配置运行环境。
### 运行准备
1. 确保已安装以下工具:
- Python 3.9 及以上
- Node.js 和 npm (前端运行需要)
- U 盾设备(推荐使用安全机构颁发的硬件)
2. 克隆项目代码:
```bash
git clone https://github.com/DeMoYao100/byrFileShare.git
```
### 部署步骤
#### 服务端 (Server)
1. 进入
```
server
```
目录:
```bash
cd server
```
2. 安装依赖:
```bash
pip install -r requirements.txt
```
3. 初始化数据库及目录:
```bash
python db.py
mkdir storage tmp
```
4. 启动服务:
```bash
python server.py
```
#### 客户端后端 (Client)
1. 进入
```
client
```
目录:
```bash
cd client
```
2. 安装依赖:
```bash
pip install -r requirements.txt
```
3. 修改 `ip.txt`,填入服务器 IP 地址。
4. 启动客户端后端:
```bash
python client.py
```
#### 客户端前端 (Frontend)
1. 进入
```
frontend
```
目录:
```bash
cd frontend
```
2. 安装依赖:
```bash
npm install
```
3. 启动前端:
```bash
npm run serve
```
## 系统说明文档
项目中的 **系统说明文档** 包含以下内容,用于详细说明系统的设计和实现:
- **作品技术原理介绍**:介绍系统的核心技术原理和关键实现。
- **概要设计报告**:系统的高层次设计和架构概述。
- **详细设计报告**:深入描述系统模块的实现细节。
- **测试分析报告**:测试案例及系统性能分析结果。
- **程序编译和安装使用文档**:运行环境准备、程序编译及启动指导。
- **接口规范文档**:系统模块和外部交互的 API 规范。
您可以在系统说明文档目录下找到上述文件,获取更详细的技术细节。
## 联系我们
如有任何疑问或建议,请通过 [
[email protected]](mailto:
[email protected]) 联系我们。
**感谢支持 SeCloud!** 如果您喜欢该项目,请为我们点亮一颗 **Star** ⭐。
", Assign "at most 3 tags" to the expected json: {"id":"12439","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"