Steven Tse

COMP3334 Secure Online Storage System

Secure Storage • MFA • Encryption

A secure file storage and sharing system with user authentication, MFA via email OTP, and per-file encryption.

Overview

A secure file storage and sharing system with user authentication, MFA via email OTP, and file encryption. Designed for secure uploads, per-file encryption with user-specific keys, and safe sharing capabilities.

Features

  • User registration and login with password hashing and MFA (OTP via email)
  • File upload, download, edit, delete, and sharing
  • Per-file encryption with user-specific keys
  • Admin user for viewing users and logs
  • Rate limiting for security

Setup Instructions

1. Clone the Repository
git clone https://github.com/paco1127/secure-online-storage-system.git
cd secure-online-storage-system/src
2. Install Dependencies
pip install -r requirements.txt
3. Configure Environment Variables

Edit the .env file to provide your email provider credentials and admin settings:

SENDER_EMAIL="your_email@example.com"
SENDER_PASSWORD="your_email_password"
SMTP_SERVER="smtp.yourprovider.com"
SMTP_PORT=587

ADMIN_PASSWORD="your_admin_password"
ADMIN_EMAIL="your_admin_email@example.com"

Note: You must use valid SMTP credentials for OTP email delivery.

4. Generate SSL Certificates (Optional for Localhost)
openssl req -x509 -newkey rsa:4096 -keyout localhost.key -out localhost.crt -days 365 -nodes -subj "/CN=localhost"
5. Start the Server
python server.py
6. Run the Client
python client.py

Usage

  1. Register: Create a new user account.
  2. Login: Authenticate with password and OTP sent to your email.
  3. File Management: Upload, edit, delete, download, and share files securely.
  4. Admin: Login as admin (credentials in .env) to view users and logs.

Notes

  • All files are encrypted before upload using per-file keys.
  • OTPs are sent via email for MFA; ensure your SMTP credentials are correct.
  • Intended for educational/demo use only.

Repository

Source code: paco1127/secure-online-storage-system

← Back to Portfolio