gfgLock is a free, open-source desktop app that encrypts and decrypts files using battle-tested cryptography - AES-256 GCM, AES-256 CFB, and ChaCha20-Poly1305 - all powered by a native C++ engine backed by OpenSSL. Drop files onto the window, enter a password, done. No account, no cloud, no subscription, no telemetry. Ever.
Your files. Your machine. Your rules.
- gfgLock
gfgLock is for anyone who takes file privacy seriously without wanting to become a cryptography expert first:
- Developers storing sensitive config files, credentials, or client data locally
- Freelancers & contractors delivering confidential documents to clients
- Students & researchers protecting academic work, drafts, or datasets
- Privacy-conscious users who simply don't trust cloud sync with everything
- IT professionals needing a portable, no-admin-required encryption tool for remote work
- Sensitive media owners - private photos, videos, or personal archives you'd rather keep completely off the cloud
If you've ever thought "I wish I could just lock this file" - this is for you.
Most encryption tools make you choose between complexity and trust. Either the UI is a maze, the algorithm is outdated, or the app needs a cloud account to function. gfgLock was built to close that gap.
- π 100 % offline - no accounts, no cloud sync, no telemetry, no pinging home
- β‘ Hardware-accelerated - native C++ extension backed by OpenSSL; seamless Python fallback on any machine
- π¨ Modern, clean UI - PySide6 + QML with System, Light, and Dark themes
- π§© Three authenticated ciphers - pick the right algorithm for the job
- π¦ Three install modes - system-wide, per-user (no admin), and portable (USB-friendly)
- π±οΈ Context-menu integration - right-click any file in Windows Explorer to encrypt or decrypt
- Multi-algorithm support - AES-256 GCM (
.gfglock), AES-256 CFB (.gfglck), ChaCha20-Poly1305 (.gfgcha) - Native C++ engine - OpenSSL-backed AES-NI hardware acceleration with transparent Python fallback
- Batch processing - encrypt or decrypt entire folders in one operation using multi-threading
- Real-time progress - per-file progress bar with remaining time estimation
- Chunk-based streaming - configurable 8 MB β 128 MB chunk sizes for large file handling
- File Explorer context menu - right-click any file β Encrypt with gfgLock / Decrypt with gfgLock
- Drag & drop - drop files or folders directly onto the window
- Detailed logging - full activity or critical-only log levels saved to
%APPDATA%\gfgLock\logs\ - Live theme switching - System / Light / Dark with instant preview
- Zero dependencies at runtime - fully self-contained executable
winget install gfgRoyal.gfgLock| Package | Admin Required | Best For |
|---|---|---|
gfgLock_3.0.1_system_installer.exe |
β | Shared / corporate machines |
gfgLock_3.0.1_user_installer.exe |
β | Personal machines - recommended |
gfgLock_3.0.1_portable.exe |
β | USB drives, no-install environments |
Compressed .7z archives for all three variants are also available on the Releases page.
- Add files - drag & drop onto the window, or use Add Files / Add Folder
- Select an algorithm - AES-256 GCM is the default; see Encryption Algorithms if unsure
- Choose Encrypt or Decrypt - click the corresponding button
- Enter your password - 12+ characters strongly recommended
- Start - hit Start and watch real-time progress
Encrypted files are saved in the same folder as the original, identified by their extension. To decrypt, drop an encrypted file onto gfgLock - the algorithm is auto-detected from the extension, no configuration needed.
| Algorithm | Extension | Type | Recommended For |
|---|---|---|---|
| AES-256 GCM | .gfglock |
AEAD | β General purpose - the safe default |
| AES-256 CFB | .gfglck |
Stream | Large batches, speed-critical workflows |
| ChaCha20-Poly1305 | .gfgcha |
AEAD | CPUs without AES-NI; timing-attack resistance |
Need strong, authenticated encryption?
β AES-256 GCM (authenticated, hardware-accelerated, recommended)
Encrypting large batches and need every bit of speed?
β AES-256 CFB (~40 % faster than GCM; verify file integrity separately)
Older hardware or need constant-time, timing-attack-resistant encryption?
β ChaCha20-Poly1305 (AEAD, constant-time, no AES-NI required)
β οΈ Compatibility: Files encrypted with one algorithm cannot be decrypted with another. The algorithm is auto-detected on decryption from the file extension.
β οΈ Version notice: Files encrypted with v2.7.0 or earlier are not compatible with v2.7.5 or later due to a file-structure change.
Your password is never stored or transmitted anywhere. A unique encryption key is derived fresh for every single operation:
Password
β
SHA-256 hash + random 16-byte salt
β
PBKDF2-HMAC-SHA256 (200 000 iterations)
β
256-bit encryption key
- β No telemetry or usage reporting
- β No cloud sync or remote backup
- β No accounts or registration required
- β No third-party analytics or tracking
- Use strong, unique passwords - 12+ characters, mixed case, numbers, and symbols
- Keep encrypted files in a secure location - gfgLock protects content, not storage
- Enable logging for audit trails in compliance-sensitive environments
- Back up your passwords - there is no recovery mechanism by design
| Setting | Description |
|---|---|
| CPU Threads | 1 to (cores β 1) - trade raw speed for system responsiveness |
| Chunk Size | 8 MB (default) to 128 MB - larger chunks improve throughput on NVMe drives |
| Encrypt Filenames | Optionally randomise output filenames for additional obscurity |
| Size | Best For |
|---|---|
| Off (stream mode) | Files under 10 MB - fastest, full file loaded into RAM |
| 8 MB | General use - balanced default |
| 16β32 MB | Files over 50 MB on modern desktops |
| 64 MB+ | Files over 500 MB on high-end NVMe systems |
| Setting | Description |
|---|---|
| Performance | CPU Thread Clamping [Disable Clamping for performance mode] |
| Log Level | Full (all operations) or Critical (errors only) |
| Log Actions | Clear all logs or open the logs folder |
| Notifications | Operation Completed alerts via Windows 11 style notification |
- Python 3.11+
- Visual Studio 2022 Build Tools - Desktop development with C++ workload
- CMake β₯ 3.25
- Inno Setup 6
# 1. Clone the repository
git clone https://github.com/ShahFaisalGfG/gfgLock.git
cd gfgLock
# 2. Create and activate a virtual environment
python -m venv .venv
.venv\Scripts\Activate.ps1
# 3. Install Python dependencies
pip install -r requirements.txt
# 4. Run directly (no native build required)
python -m gfglock.\scripts\build.ps1This single script runs scripts\build_native.ps1 (bootstraps vcpkg, compiles OpenSSL + pybind11, builds the CMake project), then PyInstaller bundling, then Inno Setup compilation. Output lands in build\installer\.
First-run note: vcpkg will clone from GitHub and download OpenSSL - internet access is required for the first build only.
| Issue | Solution |
|---|---|
| "Could not parse stylesheet" warning | Harmless Qt startup message - no data loss, safe to ignore |
| File fails to decrypt | Verify the extension (.gfglock, .gfglck, .gfgcha), the password, and file integrity |
| Slow performance | Increase CPU Threads and/or chunk size in Preferences; close background apps |
| Context menu not appearing | Re-run the installer; use Run as administrator for the system installer |
| Logs not created | Enable logging in Advanced settings; check write permissions on %APPDATA%\gfgLock\logs\ |
Still stuck? Open an issue with your log file and gfgLock version - I'll get back to you.
Contributions of all kinds are genuinely welcome - bug reports, fixes, new features, translations, or just improving a sentence in the docs.
- Fork the repository and clone your fork
- Create a feature branch:
git checkout -b feature/your-feature - Make your changes and ensure:
pyrightpasses on all edited Python filesqmllintpasses on all edited.qmlfiles
- Commit with a clear message and open a Pull Request targeting the
developmentbranch
For significant changes, please open an issue first to discuss the approach - it saves time for everyone and increases the chance your PR gets merged quickly.
Not sure where to start? Look for issues tagged good first issue.
| Version | Planned Feature |
|---|---|
| v3.1.0 | Context menu improvements + Local Password Wallet |
| v3.2.0 | File integrity verification (SHA-256 checksums) |
| v3.3.0 | Resumable / pause-and-continue for large file operations |
| v4.0.0 | Cloud-encrypted password backup |
Have a feature idea or a use case we haven't thought of? Start a discussion - feature requests that get traction move up the roadmap.
- πΌοΈ Startup splash screen: live dependency-loading progress shown while the app boots
- π Fixed: unified system/user installer AppIds - resolves duplicate Add/Remove Programs entries
- π Fixed: user (non-admin) installer no longer schedules a reboot-time file replacement for the shell extension DLL, which required admin rights it doesn't have
- π Native engine: C++ extension backed by OpenSSL - hardware-accelerated AES-256 GCM/CFB and ChaCha20-Poly1305 with seamless Python fallback
- π§ͺ Test suite: Full
pytestcoverage - native path, Python fallback, and cross-path round-trip compatibility - π§ Build:
scripts/build_native.ps1automates MSVC + vcpkg + CMake compilation in one command - π Build scripts reorganised under
scripts/
- π¨ UI rewrite: PyQt6 widgets replaced with PySide6 + QML, Material-style interface
- β±οΈ Remaining time estimation during operations
- π Auto-focus password field; Enter key starts operation
- πͺ΅ Fixed log routing - critical and full log levels now correctly separated
- ποΈ Added
scripts/build.ps1one-command installer build
- β‘ Optimised cipher performance; AES-NI hardware detection
- π Stream mode (chunk size Off) for small files
- β¨ Multi-algorithm support (AES-256 GCM/CFB, ChaCha20-Poly1305)
- β¨ Comprehensive logging, dynamic theme support, smart file filtering
Released under the MIT License - free to use, modify, and distribute.
Built with β€οΈ by Shah Faisal Β· Portfolio Β· shahfaisalgfg@outlook.com
gfgLock is free and will always stay free. If it's saved you time, protected a file that mattered, or just made your workflow a little smoother, here are a few ways to give back:
- β Star the repo - it takes two seconds and helps others find the project
- π Report a bug - honest feedback makes the tool better for everyone
- π‘ Suggest a feature - if you need it, chances are someone else does too
- π Share it - tell a friend, post it in a forum, or mention it in a blog post
- π οΈ Contribute code - PRs are always welcome; see Contributing
Stay secure. Encrypt responsibly. π






