A secure desktop credential manager built with Python and PyQt6. This project serves as a practical implementation of local data encryption, exploring how to safely handle sensitive user information within a GUI environment.
-
Local-First Security Your credentials never touch the cloud; everything is stored locally on your machine.
-
Fernet Encryption Implements AES-128 in CBC mode via the
cryptographylibrary to ensure data remains unreadable without the encryption key. -
Dynamic Card UI An interactive dashboard that automatically arranges credentials in a clean grid using custom PyQt6 widgets.
-
Automated Key Management Handles encryption key generation and secure storage in system-protected folders (Local AppData on Windows).
To handle data persistence without manual intervention, the project includes a Windows Command script (.bat) for automated database uploads.
- Environment Initialization: Automatically navigates to the project directory and activates the Python Virtual Environment.
- Execution: Runs the background Python synchronization script.
- Logging: Records all activity, including timestamps and error codes, into
backup_log.txt. - Error Handling: Detects failed uploads and captures traceback errors for debugging.
-
Programming Language: Python 3.x
-
GUI Framework: PyQt6
-
Encryption Logic: Cryptography (Fernet)
-
Storage Format: Encrypted JSON
Ensure you have Python 3.9+ installed:
bash python --version
bash git clone https://github.com/nikolapetrovic01/PasswordSafeHouse.git cd PasswordSafeHouse pip install PyQt6 cryptography
-
Key Generation: On the first run, the app generates a unique encryption key (
key.key). -
Isolation: The key is stored in a separate directory from the application data to prevent accidental exposure.
-
Encryption Flow: 1. The
Credentialobject is serialized. 2. Data is encoded to UTF-8. 3. The Fernet instance encrypts the string into a secure byte-token. 4. The token is saved into a local JSON file.
| Feature | The Plan |
|---|---|
| 1. Master Password | Add a login screen to prevent unauthorized app access. |
| 2. Masked Data Entry | Hide sensitive text by default in the UI. |
| 3. Backup Integration | Fully connect the "Save" and "Load" menu actions to the file system. |