HasnainSherazi/SecureFileVault

GitHub: HasnainSherazi/SecureFileVault

一个采用 AES-256 加密与 bcrypt+TOTP 双重身份认证的多用户文件保险库,同时提供 Flask Web 应用和 CLI 工具。

Stars: 0 | Forks: 0

# 🔐 安全文件保险库 一个多用户文件加密保险库,采用密码 + TOTP 双重身份验证,同时提供 Flask Web 应用和命令行工具版本。 ![Python](https://img.shields.io/badge/Python-3776AB?style=flat&logo=python&logoColor=white) ![Flask](https://img.shields.io/badge/Flask-000000?style=flat&logo=flask&logoColor=white) ![Cryptography](https://img.shields.io/badge/AES--256-CFB-red?style=flat) ![bcrypt](https://img.shields.io/badge/bcrypt-Password%20Hashing-blue?style=flat) ![TOTP](https://img.shields.io/badge/2FA-TOTP-green?style=flat) ## 📌 概述 安全文件保险库允许每位注册用户在双重保护下加密并存储文件:**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 人工智能专业本科生 [![LinkedIn](https://img.shields.io/badge/LinkedIn-0A66C2?style=flat&logo=linkedin&logoColor=white)](https://linkedin.com/in/syed-muhammad-hasnain-sherazi) [![Hugging Face](https://img.shields.io/badge/Hugging%20Face-FFD21E?style=flat&logo=huggingface&logoColor=black)](https://huggingface.co/HasnainSherazi) [![GitHub](https://img.shields.io/badge/GitHub-181717?style=flat&logo=github&logoColor=white)](https://github.com/HasnainSherazi) ## 📄 许可证 本项目是开源项目,基于 [MIT 许可证](LICENSE) 提供。
标签:逆向工具