A secure file uploader application that encrypts files using AES-256 encryption before uploading them to Google Drive. Built with JavaFX for a modern user interface and Maven for dependency management.
- File Encryption: AES-256/CBC encryption with PKCS7 padding using Bouncy Castle
- Google Drive Integration: Secure upload to Google Drive with OAuth2 authentication
- Modern GUI: JavaFX-based user interface with file selection and progress tracking
- Configuration Management: Persistent user preferences and settings
- Secure Key Management: Automatic key generation and secure storage
- Multi-file Support: Batch processing of multiple files
- Progress Tracking: Real-time progress updates for encryption and upload operations
- Java 11 or higher
- Maven 3.6 or higher
- Google Cloud Platform account with Drive API enabled
- Google OAuth2 credentials
- Clone the repository:
git clone https://github.com/yourusername/SecureDriveUploader.git
cd SecureDriveUploader- Build the project:
mvn clean compile- Set up Google Drive API credentials:
- Go to Google Cloud Console
- Create a new project or select an existing one
- Enable the Google Drive API
- Create OAuth2 credentials (Desktop application)
- Download the credentials JSON file
- Place it in
src/main/resources/credentials.json
mvn javafx:runOr build and run the JAR:
mvn clean package
java -jar target/SecureDriveUploader-1.0.0.jar- Launch the application
- Select files using the "Select Files" button
- Choose whether to encrypt files and/or upload to Google Drive
- Click "Encrypt Files" to encrypt selected files (if enabled)
- Click "Upload Files" to upload files to Google Drive (if enabled)
The application stores configuration in ~/.securedrive/app.properties. You can modify settings such as:
- Default encryption/upload preferences
- Window size and position
- Google Drive folder settings
- Logging levels
src/
├── main/
│ ├── java/
│ │ └── com/
│ │ └── securedrive/
│ │ ├── Main.java # Application entry point
│ │ ├── ui/
│ │ │ ├── MainWindow.java # Main GUI controller
│ │ │ └── FileItem.java # File model class
│ │ ├── crypto/
│ │ │ ├── FileEncryptor.java # AES encryption implementation
│ │ │ └── KeyManager.java # Key generation and management
│ │ ├── drive/
│ │ │ ├── DriveUploader.java # Google Drive upload logic
│ │ │ └── DriveService.java # Google Drive API service
│ │ └── util/
│ │ ├── FileChooserUtil.java # File selection dialogs
│ │ └── ConfigManager.java # Configuration management
│ └── resources/
│ ├── ui/
│ │ └── main.fxml # GUI layout
│ └── app.properties # Default configuration
└── test/
└── java/
└── com/
└── securedrive/ # Test classes
- AES-256 Encryption: Industry-standard encryption algorithm
- Secure Key Storage: Keys stored with restricted file permissions
- OAuth2 Authentication: Secure Google Drive API authentication
- No Plain Text Storage: Encrypted files are never stored in plain text
- Secure Random IV: Each file encrypted with a unique initialization vector
- JavaFX: Modern GUI framework
- Google Drive API: Google Drive integration
- Bouncy Castle: Cryptographic library for AES encryption
- SLF4J + Logback: Logging framework
- JUnit 5: Testing framework
# Clone the repository
git clone https://github.com/yourusername/SecureDriveUploader.git
cd SecureDriveUploader
# Compile the project
mvn clean compile
# Run tests
mvn test
# Package the application
mvn clean package
# Run the application
mvn javafx:run- Create a Google Cloud Platform project
- Enable the Google Drive API
- Create OAuth2 credentials for a desktop application
- Download the credentials JSON file
- Place it in
src/main/resources/credentials.json
The application configuration is stored in ~/.securedrive/app.properties:
# Encryption settings
encryption.enabled=true
encryption.algorithm=AES
encryption.mode=CBC
key.length=256
# Upload settings
upload.enabled=true
drive.folder.name=SecureDriveUploader
# UI settings
window.width=800
window.height=600
show.notifications=true-
Google Drive Authentication Failed
- Ensure credentials.json is in the correct location
- Check that the Google Drive API is enabled
- Verify OAuth2 credentials are for a desktop application
-
Encryption Errors
- Check file permissions
- Ensure sufficient disk space
- Verify Bouncy Castle provider is loaded
-
Upload Failures
- Check internet connection
- Verify Google Drive storage quota
- Check file size limits
Application logs are stored in the user's home directory under .securedrive/logs/. Check these files for detailed error information.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Google Drive API for file storage
- Bouncy Castle for cryptographic functions
- JavaFX for the user interface
- Maven for project management
For support, please open an issue on GitHub or contact the maintainers.
- Initial release
- AES-256 file encryption
- Google Drive integration
- JavaFX GUI
- Configuration management
- Multi-file support