A modern, secure, local password manager with a beautiful PyQt5 GUI interface. All passwords are encrypted before storage and never saved in plaintext. Features include Dark Mode, PDF Export, Export/Import functionality, sequential ID management, and support for email/notes fields.
- Military-grade Encryption: AES-128-CBC with HMAC-SHA256 authentication
- Master Password Protection: PBKDF2 with 600,000 iterations
- Zero-knowledge Architecture: Only you can access your passwords
- Encrypted Storage: Passwords never stored in plaintext
- Secure Random Generation: Cryptographically secure password generation
- Data Integrity: SHA-256 verification for export files
- Modern PyQt5 GUI: Beautiful, responsive interface with gradient buttons
- Dark Mode Support: Toggle between light and dark themes
- PDF Export: Generate professional PDF reports with all password entries
- Smart Search: Search by service, username, or email
- Password Generator: Configurable secure password generation with strength analysis
- Strength Analysis: Real-time password strength evaluation with entropy calculation
- Export/Import: Encrypted backup and migration with separate export passwords
- Sequential IDs: Clean 1,2,3,4... display even after deletions
- Extended Fields: Email and Notes support for each entry
- Clipboard Integration: One-click copy passwords
- History Tracking: Creation timestamps in readable format
- Beautiful Styling: Modern gradient buttons, hover effects, and professional UI
- Dark Mode: Beautiful dark theme with proper styling for all dialogs
- PDF Export: Professional PDF reports with formatted dates and password visibility
- Modern PyQt5 GUI: Upgraded from Tkinter to PyQt5 for better performance
- Enhanced Button Styling: Gradient buttons with hover effects
- Readable Date Formats: All dates displayed in human-readable format (e.g., "23 January 2026, 11:17 AM")
- Text Wrapping: Proper text wrapping in PDF tables to prevent overflow
- Improved Dialog Styling: All dialogs (QMessageBox, QInputDialog) support dark mode
- Better Table Display: Enhanced table styling with proper date formatting
Features:
- Light/Dark mode toggle
- Gradient button styling with hover effects
- Search functionality
- Password strength indicator
- One-click password copy
- Professional table display with readable dates
==========================================================
Secure Vault Password Manager - CLI Version 1.0.0
==========================================================
----------------------------------------
MAIN MENU
----------------------------------------
1. Add new password entry
2. Get password entry
3. Delete password entry
4. Generate secure password
5. List all entries
6. Change master password
7. Export passwords
8. Import passwords
9. Exit
----------------------------------------
- Python 3.7 or higher
- pip package manager
- Clone the repository
git clone https://github.com/skilldevloper/secure-vault-password-manager.git
cd secure-vault-password-manager- Install dependencies
pip install -r requirements.txtOr install manually:
pip install PyQt5 reportlab pyperclip cryptographyRequired Dependencies:
PyQt5- Modern GUI frameworkreportlab- PDF generationpyperclip- Clipboard operationscryptography- Encryption/decryption
- Optional: Install Tkinter (Linux)
# Ubuntu/Debian
sudo apt-get install python3-tk
# Fedora/RHEL
sudo dnf install python3-tkinter
# Arch Linux
sudo pacman -S tkGUI Version (PyQt5):
python gui_app_updated.pyNote: Make sure you have PyQt5 installed:
pip install PyQt5 reportlab pyperclip cryptographyCLI Version (Legacy):
python app.pysecure-vault-password-manager/
βββ gui_app_updated.py # Main GUI application (PyQt5) β
βββ app.py # CLI application (Legacy)
βββ gui_app.py # Old Tkinter GUI (Legacy)
βββ db.py # Database operations (SQLite)
βββ crypto_utils.py # Encryption/decryption utilities
βββ password_generator.py # Secure password generation
βββ config.py # Configuration constants
βββ requirements.txt # Python dependencies
βββ vault.db # Encrypted SQLite database (auto-created)
βββ LICENSE # MIT License
βββ README.md # This file
βββ Images/ # Button icons (optional)
βββ add.png
βββ update.png
βββ delete.png
βββ copy.png
βββ dark.png
βββ generate.png
βββ ...
On first launch, you'll be prompted to create a master password:
- Minimum 8 characters
- Strongly recommended: 12+ characters with mixed types
- This password encrypts ALL your stored passwords
- IMPORTANT: If lost, your data cannot be recovered!
Toggle between light and dark themes:
- Click "Dark Mode" button to switch themes
- All dialogs (error messages, input dialogs) automatically adapt
- Theme preference is maintained during the session
In GUI (PyQt5):
- Click "Authenticate" and enter master password
- Fill in Service (optional), Username (required), Email (optional)
- Enter password or click "Generate Password" button
- Add notes if needed in the notes field
- Click "Add Entry" button
- View password strength indicator in real-time
In CLI:
# Select option 1 from main menu
Service: github.com
Username: yourusername
Email: user@example.com
Password: [Enter or generate]
Notes: [Optional multi-line notes]Search by:
- Service name (github.com)
- Username (yourusername)
- Email (user@example.com)
Features:
- Fuzzy search across all fields
- Sequential ID display (1,2,3,4...)
- One-click copy to clipboard
- View encrypted creation date
Options available:
- Length: 8-50 characters (adjustable via slider)
- Character sets: Lowercase, Uppercase, Digits, Symbols
- Strength evaluation with entropy calculation (bits)
- Real-time strength indicator in main window
- Auto-copy to clipboard
- Use generated password directly in entry form
Export to Encrypted File:
- Click "Export" button
- Enter export password (different from master password)
- Choose save location
- Encrypted
.encfile created
Export to PDF:
- Click "PDF Export" button
- Choose save location
- Professional PDF report generated with:
- All entries with passwords
- Formatted dates (e.g., "23 January 2026")
- Statistics and metadata
- Properly wrapped text in tables
Import:
- Click "Import" button
- Select export file (
.encformat) - Enter export password
- Choose duplicate handling (skip or overwrite)
- Data restored with progress indicator
User Master Password
β
PBKDF2-HMAC-SHA256 (600,000 iterations)
β
Fernet Key (AES-128-CBC + HMAC-SHA256)
β
Encrypted Password Storage
CREATE TABLE vault (
id INTEGER PRIMARY KEY AUTOINCREMENT,
service TEXT,
username TEXT NOT NULL,
password TEXT NOT NULL, -- Encrypted
email TEXT,
notes TEXT,
created_at TEXT NOT NULL
);- Salt per installation: Unique salt for key derivation
- Authenticated encryption: Detects tampering attempts
- Memory safety: Passwords cleared from memory after use
- Input validation: Sanitized all user inputs
- Error handling: No sensitive information in error messages
- Export encryption: Separate password for backup files
# Even if database IDs are 1, 3, 5 after deletions
# Display will always be: 1, 2, 3
Actual DB IDs: [1, 3, 5, 7]
Display IDs: [1, 2, 3, 4]The system automatically:
- Detects old database schema
- Adds new columns (email, notes)
- Preserves existing data
- Maintains backward compatibility
The GUI displays real-time statistics:
- Total Entries count
- Entries with Email count
- Entries with Notes count
- Latest Entry date (formatted as "23 January 2026, 11:17 AM")
# Test basic functionality
python -c "from db import DatabaseManager; db = DatabaseManager(); print('DB OK')"
# Test encryption
python -c "from crypto_utils import CryptoManager; print('Crypto OK')"
# Test password generation
python -c "from password_generator import PasswordGenerator; pg = PasswordGenerator(); print(pg.generate_password())"- First-run setup works
- Master password authentication
- Add/Edit/Delete entries
- Password generation
- Search functionality
- Export/Import
- Sequential ID display
- Email and Notes fields
Issue: "Tkinter not found" (Linux)
# Install Tkinter
sudo apt-get install python3-tk # Ubuntu/DebianIssue: Database locked
# Close other instances
# Check for zombie processes
ps aux | grep python
kill -9 [process_id]Issue: Import password incorrect
- Verify you're using export password, not master password
- Check for caps lock
- Try exact password used during export
Issue: Images not loading
- Create
Imagesfolder in project directory - Add PNG images for buttons (optional)
- Or system will use text buttons automatically
Issue: PyQt5 not found
pip install PyQt5Issue: PDF export not working
pip install reportlabEnable debug logging:
# Add to any file
import logging
logging.basicConfig(level=logging.DEBUG){
"metadata": {
"export_date": "2024-01-15T14:30:00",
"total_entries": 15,
"app_version": "1.0"
},
"entries": [
{
"service": "github.com",
"username": "user123",
"password": "decrypted_password",
"email": "user@example.com",
"notes": "Personal account",
"created_at": "2024-01-10T10:30:00"
}
]
}- Data serialized to JSON
- New salt generated for export
- PBKDF2 key derivation from export password
- Fernet encryption of JSON data
- SHA-256 hash for integrity check
- All components packaged in export file
| Operation | Average Time | Notes |
|---|---|---|
| Add Entry | < 50ms | Includes encryption |
| Search | < 100ms | With 1000+ entries |
| Export (Encrypted) | ~1s per 100 entries | Depends on size |
| Export (PDF) | ~2s per 100 entries | Includes formatting |
| Import | ~2s per 100 entries | Includes decryption |
- Base: ~60MB (PyQt5 GUI)
- Per 1000 entries: +~10MB
- Peak during encryption: +~5MB
- Dark mode: No additional overhead
We welcome contributions! Please follow these steps:
- Fork the repository
- Create a feature branch
git checkout -b feature/amazing-feature- Commit your changes
git commit -m 'Add amazing feature'- Push to the branch
git push origin feature/amazing-feature- Open a Pull Request
- Follow PEP 8 style guide
- Add docstrings to all functions
- Include unit tests for new features
- Update documentation
- Maintain backward compatibility
- Dark Mode Support β
- PDF Export β
- Modern PyQt5 GUI β
- Additional encryption algorithms
- Cloud sync integration
- Browser extension
- Mobile app
- Two-factor authentication
- Password sharing (encrypted)
- Automatic backup scheduling
- Password health checker
- Theme customization
# Key methods
db = DatabaseManager()
db.add_entry(service, username, encrypted_password, email, notes)
db.get_entries_with_sequential_ids() # Returns 1,2,3,4... IDs
db.search_entries(term) # Search across all fields
db.get_statistics() # Get database statscrypto = CryptoManager(db)
crypto.authenticate(password) # Master password auth
crypto.encrypt_password(plaintext)
crypto.decrypt_password(encrypted)
crypto.export_data_with_password(data, export_password)
crypto.import_data_with_password(export_package, import_password)pg = PasswordGenerator()
pg.generate_password(length=20, include_symbols=True)
pg.evaluate_strength(password) # Returns strength analysis
pg.calculate_entropy(password) # Entropy in bitsPlanned browser extension features:
- Auto-fill passwords
- Password capture on signup
- Security alerts for weak/reused passwords
- One-click login
- Use a strong master password: 12+ characters, mixed types
- Regular backups: Export monthly or after major changes
- Different export password: Don't reuse master password
- Secure storage: Keep export files in encrypted drives
- Update regularly: Check for security updates
- Never log sensitive data: Passwords, keys, etc.
- Use parameterized queries: Prevent SQL injection
- Validate all inputs: Sanitize user data
- Handle errors gracefully: No stack traces to users
- Regular security audits: Review crypto implementation
- Encrypts passwords with strong cryptography
- Stores data locally only
- Provides secure password generation
- Allows encrypted backups
- Recover lost master passwords
- Sync to cloud automatically
- Protect against keyloggers
- Secure the underlying OS
- Prevent physical access attacks
- Full disk encryption (BitLocker, FileVault, LUKS)
- Regular system updates
- Antivirus software
- Firewall protection
- Physical security of devices
- PyQt5: GPL v3 or Commercial License
- cryptography: Apache License 2.0
- reportlab: BSD License
- pyperclip: BSD License
- Python Cryptography team for the excellent
cryptographylibrary - Al Sweigart for
pyperclip - The open-source community for inspiration and tools
- All contributors who help improve this project
- Check the documentation first
- Search existing issues on GitHub
- Enable debug logging for more details
- Create a new issue with:
- Error messages
- Steps to reproduce
- System information
- Screenshots if applicable
- GitHub Discussions: For questions and ideas
- Issue Tracker: For bug reports
- Pull Requests: For contributions
Current Version: 1.2.0
Last Updated: January 2026
Python Support: 3.7+
GUI Framework: PyQt5
Active Development: Yes
Security Audited: Self-audited
- v1.2.0 (Current): PyQt5 GUI, Dark Mode, PDF Export, Enhanced Styling
- v1.1.0: Email/Notes fields, Sequential IDs, Enhanced Search
- v1.0.0: Initial release with Tkinter GUI
Disclaimer: This software is provided "as is" without warranty. Use at your own risk. The authors are not responsible for any data loss or security breaches.
Remember: Your security is your responsibility. Use strong passwords, keep backups, and stay informed about security best practices.
Happy and Secure Password Managing! π





