A desktop application for AES-256-GCM encryption of files, text, and passwords — entirely local, no network access, no cloud.
- File Encryption — Chunked AES-256-GCM encryption for files of any size, with a live progress bar and mid-operation cancellation.
- Text Encryption — Encrypt and decrypt arbitrary text in memory; export/import as
.etxt(JSON) files. - Password Vault — An encrypted local vault (
~/.encryptionapp_vault.json) to securely store usernames, passwords, and notes. - Key Management — Generate or load 256-bit
.keyfiles; verify keys via their SHA-256 fingerprint. - Dual Key Modes — All encryption operations accept either a password (Scrypt KDF-derived key) or a raw key file.
- Global Key State — A key loaded in Key Management is shared across all pages.
- Light / Dark Theme — Toggle from the sidebar; dark mode by default.
- Responsive UI — File operations run on background threads; the interface never freezes.
| Primitive | Details |
|---|---|
| Cipher | AES-256-GCM (authenticated encryption) |
| KDF (files/text) | Scrypt — N=2¹⁷, r=8, p=1 (OWASP 2024 minimum) |
| KDF (vault) | PBKDF2-SHA256 — 600 000 iterations (NIST SP 800-132) |
| Nonce | 96-bit random nonce, freshly generated per operation |
| Salt | 256-bit random salt, stored alongside ciphertext |
| Chunk auth | Each 64 KB chunk is independently authenticated |
Every ciphertext is validated before any plaintext is written. Truncated or tampered files are rejected outright.
- Python 3.10+
- Dependencies listed in
requirements.txt:
cryptography >= 41.0.0
customtkinter >= 5.2.0
# 1. Clone the repository
git clone https://github.com/santydesignscr/EncryptionApp-v2.git
cd EncryptionApp-v2
# 2. (Recommended) Create a virtual environment
python -m venv .venv
.venv\Scripts\activate # Windows
# source .venv/bin/activate # macOS/Linux
# 3. Install dependencies
pip install -r requirements.txt
# 4. Run the app
python main.py- Navigate to the File page from the sidebar.
- Select the file you want to encrypt or decrypt.
- Choose a key source — enter a password or load a key file.
- Click Encrypt or Decrypt. Progress is shown in the status bar.
- Navigate to the Text page.
- Paste or type the plaintext in the input box.
- Choose a password or key file and click Encrypt.
- Optionally export the result as a
.etxtfile or copy it to the clipboard.
- Navigate to the Keys page.
- Click Generate Key to create a new 256-bit key file, or Load Key to import an existing one.
- The SHA-256 fingerprint is displayed for verification.
- The loaded key is automatically available on the File and Text pages.
- Navigate to the Vault page.
- Create a new vault with a master password, or unlock an existing one.
- Add, view, copy, or delete entries (service name, username, password, notes).
- Click Lock to wipe the master key from memory.
Use PyInstaller to produce a single EncryptionApp.exe that requires no Python installation on the target machine.
# Install PyInstaller (one-time)
pip install pyinstaller
# Build
pyinstaller --onefile --windowed --collect-data customtkinter --name EncryptionApp main.py| Flag | Purpose |
|---|---|
--onefile |
Bundle everything into a single .exe |
--windowed |
No console window (GUI app) |
--collect-data customtkinter |
Include customtkinter themes and assets |
--name EncryptionApp |
Output file name |
The executable is written to dist\EncryptionApp.exe. The build\ folder and *.spec file are intermediate artifacts and can be deleted afterwards.
EncryptionApp-v2/
├── main.py # Entry point
├── requirements.txt
├── app/
│ ├── config.py # Constants and configuration
│ ├── crypto/
│ │ ├── core.py # AES-256-GCM primitives
│ │ ├── kdf.py # Scrypt and PBKDF2 key derivation
│ │ └── file_crypto.py # Chunked file encryption
│ ├── vault/
│ │ └── password_vault.py # Encrypted password vault
│ └── gui/
│ ├── app_window.py # Main window and navigation
│ ├── status_bar.py # Bottom status bar
│ ├── task_reporter.py # Thread → UI progress bridge
│ ├── widgets.py # Shared UI helpers
│ ├── pages/
│ │ ├── file_page.py
│ │ ├── text_page.py
│ │ ├── key_page.py
│ │ └── vault_page.py
│ └── dialogs/
│ └── vault_entry_dialog.py
This project is licensed under the GPLv3.