- 🔒 Zero-knowledge encryption — master password is never stored anywhere
- 🛡️ AES-128-CBC + HMAC-SHA256 via Fernet (authenticated encryption)
- 🔑 PBKDF2HMAC key derivation — 480 000 iterations, SHA-256
- 🗄️ Fully encrypted vault —
vault.jsonis unreadable without the correct password - 🎲 Strong password generator — cryptographically secure (20 chars)
- 📋 Auto-clearing clipboard — password erased after 30 seconds
- 🔍 Real-time search across all saved entries
- 👁️ Show / Hide password masking per entry
- 🗑️ Delete with confirmation dialog
- 🌑 Dark mode UI powered by CustomTkinter
Master Password + Salt
│
▼
PBKDF2HMAC (SHA-256, 480 000 iters)
│
▼
32-byte raw key
│
▼
base64url encode
│
▼
Fernet key ──► AES-128-CBC + HMAC-SHA256
│
▼
vault.json (full ciphertext — unreadable in Notepad)
| File | Contents | Secret? |
|---|---|---|
salt.bin |
32 random bytes (generated once) | ❌ Not secret |
vault.json |
Fully encrypted JSON blob | ✅ Ciphertext only |
| Master password | Never written anywhere | 🔐 Lives in RAM only |
pip install customtkinter cryptography pyperclipRequires Python 3.12+
python password_manager.pyFirst launch — create a master password (min. 8 characters).
Subsequent launches — enter your master password to unlock the vault.
.
├── password_manager.py # Entire application (single file)
├── vault.json # Auto-generated — encrypted vault
└── salt.bin # Auto-generated — PBKDF2 salt
| Class | Responsibility |
|---|---|
CryptoManager |
PBKDF2HMAC key derivation + Fernet encrypt / decrypt |
VaultManager |
CRUD operations on the encrypted JSON vault |
LoginScreen |
First-run setup or unlock flow (CTkinter frame) |
Dashboard |
Main UI — add, search, copy, delete passwords |
PasswordRow |
Single entry widget with Show/Hide, Copy, Delete |
Light/dark screenshots can be added here.
- Do not delete
salt.bin— without it, the vault becomes permanently inaccessible. - There is no "forgot password" feature by design. If you lose your master password, your data is gone.
- The vault is local only — no cloud sync, no telemetry.
MIT — do whatever you want, just don't blame me if you forget your master password.