{"id":29200281,"url":"https://github.com/professorlearncode/cs50p-cryptkeep","last_synced_at":"2025-07-02T10:35:36.963Z","repository":{"id":301864310,"uuid":"1010519807","full_name":"ProfessorlearnCode/cs50p-CryptKeep","owner":"ProfessorlearnCode","description":null,"archived":false,"fork":false,"pushed_at":"2025-06-29T08:54:05.000Z","size":0,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-29T09:36:19.349Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ProfessorlearnCode.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-29T08:44:25.000Z","updated_at":"2025-06-29T08:54:08.000Z","dependencies_parsed_at":"2025-06-29T09:36:25.126Z","dependency_job_id":"aaf010f7-fb24-413d-a634-7a3ff244d32d","html_url":"https://github.com/ProfessorlearnCode/cs50p-CryptKeep","commit_stats":null,"previous_names":["professorlearncode/cs50p-cryptkeep"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ProfessorlearnCode/cs50p-CryptKeep","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProfessorlearnCode%2Fcs50p-CryptKeep","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProfessorlearnCode%2Fcs50p-CryptKeep/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProfessorlearnCode%2Fcs50p-CryptKeep/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProfessorlearnCode%2Fcs50p-CryptKeep/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ProfessorlearnCode","download_url":"https://codeload.github.com/ProfessorlearnCode/cs50p-CryptKeep/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProfessorlearnCode%2Fcs50p-CryptKeep/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263121437,"owners_count":23416996,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-07-02T10:35:35.054Z","updated_at":"2025-07-02T10:35:36.946Z","avatar_url":"https://github.com/ProfessorlearnCode.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# 🔐 CS50P Final Project: CryptKeep - Encrypted Password Manager (CLI-based)\n\nThis is my final project for **Harvard's CS50P: Introduction to Programming with Python**. The project is a simple yet functional **Command Line Interface (CLI) Password Manager** that encrypts and stores your passwords securely using Python and the `cryptography` library.\n\n---\n\n## 🎥 Demo Video\n\n\u003e 🎬 *Coming Soon (Optional)*\n\n---\n\n## 🧠 Project Overview\n\nThe **Encrypted Password Manager** allows users to:\n- Generate and save **secure encryption keys**\n- Create and manage **encrypted password vaults**\n- Retrieve saved passwords for specific websites or services\n- Run simple interactive commands via the CLI\n\n### 🔒 Key Concepts Demonstrated\n- File I/O with Python\n- Object-Oriented Programming (OOP)\n- CLI-based user interaction\n- Symmetric encryption using `cryptography.fernet`\n- Secure password handling and persistence\n\n---\n\n## 📂 Project Structure\n\n```\n\ncs50p-CryptKeep/\n├── password\\_manager.py          # Main application logic\n├── test\\_password\\_manager.py     # Basic testing module\n├── requirements.txt             # Required Python packages\n\n````\n\n---\n\n## 🚀 Features\n\n- 🛡️ AES encryption for password storage using `Fernet` (from `cryptography`)\n- 🗂️ Store multiple site-password pairs securely in a local file\n- 🔑 Key-based encryption and decryption for secure access\n- 🧠 Interactive text-based menu for ease of use\n- 🧪 Includes basic test file to validate functionality\n\n---\n\n## 💻 Technologies Used\n\n- Python 3.x\n- `cryptography` library (`Fernet` encryption)\n- CLI (Command Line Interface)\n- File I/O operations\n\n---\n\n## 📦 Installation\n\n### 📌 Prerequisites\nMake sure you have:\n- Python 3.8 or above installed\n- `pip` package manager\n\n### 🔧 Setup\n\n1. **Clone the repository:**\n   ```bash\n   git clone https://github.com/professorlearncode/cs50p-CryptKeep.git\n   cd cs50p-CryptKeep\n   ```\n\n2. **Install dependencies:**\n\n   ```bash\n   pip install -r requirements.txt\n   ```\n\n3. **Run the program:**\n\n   ```bash\n   python password_manager.py\n   ```\n\n---\n\n## 🧩 How It Works\n\nUpon running the script, you'll be presented with an interactive menu:\n\n```text\n What do you want to do?\n    1. Create a new key\n    2. Load an existing key\n    3. Create a new password file\n    4. Load existing password file\n    5. Add a new password\n    6. Get a password\n    q. Quit\n```\n\n### Example Use Case\n\n1. Generate a new encryption key and store it securely\n2. Create a password vault and store initial passwords\n3. Load the key and vault later to retrieve or add passwords\n\nAll passwords are encrypted before being saved to disk and decrypted only in memory at runtime.\n\n---\n\n## 🧪 Testing\n\nA basic test script (`test_password_manager.py`) is included to verify core functionality like:\n\n* Key creation and loading\n* Password encryption/decryption\n* File-based persistence\n\nYou can extend it using `unittest` or `pytest` for further robustness.\n\n---\n\n## 📝 Notes\n\n* Encryption keys should be stored securely. Anyone with access to the key file can decrypt the stored passwords.\n* This project is intended for **educational purposes only** — not recommended for production use without further security hardening.\n* Developed as part of the **CS50P curriculum** — to apply core Python concepts in a real-world inspired mini-application.\n\n---\n\n## 🙌 Acknowledgements\n\n* Inspired by the need for basic password management and encryption.\n* Thanks to the **CS50 team** and **David J. Malan** for making learning fun and practical.\n\n---\n\n\u003e 📌 *Feel free to explore, modify, and enhance this project for your own needs!*\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprofessorlearncode%2Fcs50p-cryptkeep","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprofessorlearncode%2Fcs50p-cryptkeep","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprofessorlearncode%2Fcs50p-cryptkeep/lists"}