HasnainSherazi/SecureFileVault
GitHub: HasnainSherazi/SecureFileVault
一个采用 AES-256 加密与 bcrypt+TOTP 双重身份认证的多用户文件保险库,同时提供 Flask Web 应用和 CLI 工具。
Stars: 0 | Forks: 0
# 🔐 安全文件保险库
一个多用户文件加密保险库,采用密码 + TOTP 双重身份验证,同时提供 Flask Web 应用和命令行工具版本。





## 📌 概述
安全文件保险库允许每位注册用户在双重保护下加密并存储文件:**bcrypt 哈希密码**和 **TOTP 动态验证码**(兼容 Google Authenticator 及类似应用)。文件在写入磁盘前会使用 **AES-256** 进行加密,并且每位用户都拥有一个隔离的保险库文件夹。
该项目为同一核心逻辑提供了两种接口——一个是用于日常使用的精美 **Flask Web UI**,另一个是用于快速本地加密/解密操作的 **CLI**。
## ✨ 功能特性
- ✅ **双重身份验证** — bcrypt 密码哈希 + TOTP(通过 `pyotp` + `qrcode` 进行二维码注册)
- ✅ **AES-256 文件加密**(CFB 模式,每个文件随机生成 IV)
- ✅ **多用户支持** — 每位用户拥有独立的隔离保险库目录
- ✅ **Web 仪表板** — 从浏览器上传、加密、解密和下载文件
- ✅ **CLI 模式** — 直接从终端加密/解密文件
- ✅ **本地就地加密** — 在加密磁盘文件的同时将其备份到您的保险库中
- ✅ **活动日志记录** — 注册、登录和加密事件均带有时间戳并被记录
## 🛠️ 技术栈
| 工具 | 用途 |
|---|---|
| Python | 核心语言 |
| Flask | Web 框架与路由 |
| `cryptography` | AES-256 加密/解密 |
| `bcrypt` | 密码哈希 |
| `pyotp` | TOTP 双重身份验证 |
| `qrcode` / `Pillow` | 用于 2FA 注册的二维码生成 |
## 📂 项目结构
```
SecureFileVault/
│
├── app.py # Flask web app — routes for register/login/upload/encrypt/decrypt
├── main.py # CLI entry point — registration, auth, encrypt/decrypt menu
├── auth.py # User registration, bcrypt + TOTP verification
├── crypto_utils.py # AES-256 key generation, file encryption/decryption
├── vault.py # CLI encrypt-to-vault / decrypt-from-vault logic
├── logger.py # Timestamped activity logging
├── config.py # Central path configuration
├── requirements.txt
├── setup_and_run.bat # Windows: create venv, install deps, run CLI
├── run_web_app.bat # Windows: activate venv, run Flask app
├── templates/ # HTML templates (Flask)
│ ├── layout.html # Base template — nav, flash messages, CSS/font-awesome links
│ ├── login.html # Username + password + OTP login form
│ ├── register.html # Registration form + QR code enrollment screen
│ └── dashboard.html # File upload, local encrypt/decrypt, encrypted file list
├── static/ # CSS/JS/generated QR codes (Flask)
│ ├── style.css # Dark glassmorphism theme
│ └── qr_code.png # Generated per registration (⚠️ gitignored — contains a live secret)
├── data/ # user.json + key.bin (⚠️ gitignored — see Security Notes)
├── vault_files/ # Per-user encrypted file storage (⚠️ gitignored)
└── logs/ # activity.log (⚠️ gitignored)
```
## 🚀 运行方式
### 选项 A — Web 应用
**Windows(自动运行):**
```
setup_and_run.bat # first run — creates venv, installs dependencies, runs CLI
run_web_app.bat # launches the web server
```
**手动运行(任何操作系统):**
```
git clone https://github.com/HasnainSherazi/SecureFileVault.git
cd SecureFileVault
pip install -r requirements.txt
python app.py
```
然后在浏览器中打开 `http://127.0.0.1:5000`。注册账户,使用身份验证器应用扫描二维码,然后使用您的密码 + 6 位验证码登录。
### 选项 B — CLI
```
python main.py
```
## 🧠 工作原理
```
Register: Username + Password
│
▼
bcrypt hash password
Generate TOTP secret → QR code
│
▼
Save to data/user.json
Login: Username + Password + 6-digit OTP
│
▼
Verify bcrypt hash → Verify TOTP code
│
▼
Access granted
Upload a file
│
▼
AES-256-CFB encrypt (random IV per file)
│
▼
Stored in vault_files//filename.enc
```
## 🔒 安全说明与已知局限性
本项目是为信息安全课程构建的,旨在演示加密和 2FA 概念。在扩展此项目之前,有几个设计要点值得了解:
- **共享加密密钥** — 目前所有用户的文件都使用存储在 `data/key.bin` 中的单个密钥进行加密,而不是使用从用户密码派生的独立密钥。更安全的设计应从每位用户的密码派生其专属密钥(例如通过 PBKDF2/scrypt),这样单凭一个文件就无法访问所有保险库。
- **密文无完整性校验** — AES-CFB 提供机密性但不提供真实性。切换到 **AES-GCM** 等 AEAD 模式将允许应用检测被篡改的文件,而不是盲目解密损坏的数据。
- **`local_encrypt` / `local_decrypt` 信任任何本地路径** — 这些路由会对提交的任何文件路径进行操作,没有将其限制在安全目录中。适用于受信任的本地单用户场景;在多用户或网络部署前需要进行路径验证。
- **`key.bin` 和 `user.json` 绝不能被提交** — 它们已通过 `.gitignore` 排除,但仍需重申:仅凭 `key.bin` 即可解密每个保险库中的所有文件,因此应将其视为密码一样严密保管。
- **Flask debug 模式** — `app.run(debug=True)` 便于开发,但在任何实际部署前都应将其关闭(如果保持开启并暴露在外,Werkzeug 调试器可能会允许远程代码执行)。
## 🔮 未来改进
- [ ] 从密码派生的独立用户加密密钥 (PBKDF2/scrypt)
- [ ] 切换到 AES-GCM 以实现验证加密
- [ ] 为本地加密/解密路由提供路径验证/沙盒机制
- [ ] 密码重置流程
- [ ] 用户间文件共享
- [ ] Docker 化以便于部署
## 👤 作者
**Syed Muhammad Hasnain Sherazi**
伊斯兰堡 CUST 人工智能专业本科生
[](https://linkedin.com/in/syed-muhammad-hasnain-sherazi)
[](https://huggingface.co/HasnainSherazi)
[](https://github.com/HasnainSherazi)
## 📄 许可证
本项目是开源项目,基于 [MIT 许可证](LICENSE) 提供。
标签:逆向工具