├── entropy_password_generator ├── screenshots │ ├── --mode15.png │ └── --length85.png ├── __init__.py └── password_generator.py ├── .gitignore ├── LICENSE.md ├── .github ├── ISSUE_TEMPLATE │ ├── config.yml │ ├── bug_report.md │ └── issue_template.md └── workflows │ ├── pypi-publish.yml │ └── python-app.yml ├── pyproject.toml ├── SECURITY.md ├── CONTRIBUTING.md ├── RELEASE.md ├── PASSWORDENTROPYCALCULATION.md ├── GETTING_STARTED_WINDOWS.md ├── README.md └── CHANGELOG.md /entropy_password_generator/screenshots/--mode15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gerivanc/entropy-password-generator/HEAD/entropy_password_generator/screenshots/--mode15.png -------------------------------------------------------------------------------- /entropy_password_generator/screenshots/--length85.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gerivanc/entropy-password-generator/HEAD/entropy_password_generator/screenshots/--length85.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Python-specific ignores 2 | __pycache__/ 3 | *.pyc 4 | *.pyo 5 | *.pyd 6 | .Python 7 | *.egg-info/ 8 | dist/ 9 | build/ 10 | .pytest_cache/ 11 | .ruff_cache/ 12 | 13 | # Virtual environments 14 | env/ 15 | venv/ 16 | ENV/ 17 | env.bak/ 18 | venv.bak/ 19 | 20 | # IDE and editor files 21 | .vscode/ 22 | .idea/ 23 | *.sublime-project 24 | *.sublime-workspace 25 | .spyderproject 26 | .spyproject 27 | .jupyter/ 28 | 29 | # System files 30 | .DS_Store 31 | Thumbs.db 32 | 33 | # Logs and temporary files 34 | logs/ 35 | *.log 36 | *.bak 37 | *.swp 38 | *~ 39 | *.tmp 40 | release_summary.txt 41 | 42 | # Miscellaneous 43 | .pypirc 44 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # MIT License 2 | 3 | Copyright © 2025 Gerivan Costa dos Santos 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | # Configuration for the issue template chooser in EntroPy Password Generator. 2 | # Disables blank issues to ensure users select a template. 3 | # Includes contact links for security vulnerabilities and general support. 4 | 5 | blank_issues_enabled: false 6 | issue_templates: 7 | - filename: bug_report.md 8 | name: Bug Report 9 | about: Report a bug or unexpected behavior in the EntroPy Password Generator. 10 | - filename: issue_template.md 11 | name: General Issue 12 | about: Report feature requests, documentation improvements, or other issues. 13 | contact_links: 14 | - name: Issue Report 15 | url: https://github.com/gerivanc/entropy-password-generator/blob/main/.github/ISSUE_TEMPLATE/issue_template.md 16 | about: Report security vulnerabilities privately following our security policy. 17 | - name: General Questions or Support 18 | url: mailto:dean-grumbly-plop@duck.com 19 | about: Contact the maintainer for questions or support. 20 | - name: Bug Report 21 | url: https://github.com/gerivanc/entropy-password-generator/blob/main/.github/ISSUE_TEMPLATE/bug_report.md 22 | about: Report security bugs privately, following our security policy. 23 | -------------------------------------------------------------------------------- /entropy_password_generator/__init__.py: -------------------------------------------------------------------------------- 1 | __version__ = "0.6.4" 2 | 3 | __all__ = ["generate_password", "main"] 4 | 5 | from .password_generator import generate_password, main 6 | 7 | """ 8 | EntroPy Password Generator package. 9 | 10 | This package provides a secure password generator with configurable character 11 | sets and entropy calculation, supporting 20 predefined modes for generating 12 | strong passwords compliant with Proton© and NIST standards. It includes a 13 | command-line interface (CLI) and a programmable API via the `generate_password` 14 | function. 15 | 16 | Example: 17 | >>> from entropy_password_generator import generate_password 18 | >>> password, entropy = generate_password( 19 | ... length=24, use_special=True 20 | ... ) 21 | >>> print( 22 | ... f"Password: {password}, Entropy: {entropy:.2f} bits" 23 | ... ) 24 | 25 | Author: Gerivan Costa dos Santos 26 | License: MIT License 27 | Homepage: https://github.com/gerivanc/entropy-password-generator 28 | PyPI: https://pypi.org/project/entropy-password-generator/ 29 | """ 30 | 31 | __author__ = "Gerivan Costa dos Santos" 32 | __license__ = "MIT License" 33 | __copyright__ = "Copyright © 2025 Gerivan Costa dos Santos" 34 | -------------------------------------------------------------------------------- /.github/workflows/pypi-publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish to Test PyPI 2 | 3 | on: 4 | push: 5 | tags: 6 | - 'v*.*.*' # Publishes when a version tag (e.g., v0.6.4) is created 7 | 8 | permissions: 9 | contents: read 10 | 11 | jobs: 12 | publish-test-pypi: 13 | runs-on: ubuntu-latest 14 | 15 | steps: 16 | - uses: actions/checkout@v4 17 | 18 | - name: Set up Python 19 | uses: actions/setup-python@v5 20 | with: 21 | python-version: '3.12' 22 | 23 | - name: Install dependencies 24 | run: | 25 | python -m pip install --upgrade pip 26 | pip install hatchling build twine 27 | 28 | - name: Build package 29 | run: | 30 | python -m build 31 | 32 | - name: Debug Test PyPI Token 33 | run: | 34 | if [ -z "$TWINE_PASSWORD" ]; then 35 | echo "ERROR: TWINE_PASSWORD is not set or empty" 36 | exit 1 37 | fi 38 | env: 39 | TWINE_PASSWORD: ${{ secrets.TEST_PYPI_TOKEN }} 40 | 41 | - name: Publish to Test PyPI 42 | run: | 43 | twine upload --repository testpypi dist/* 44 | env: 45 | TWINE_USERNAME: __token__ 46 | TWINE_PASSWORD: ${{ secrets.TEST_PYPI_TOKEN }} 47 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "entropy-password-generator" 3 | version = "0.6.4" 4 | description = "A secure password generator with high entropy, compliant with Proton and NIST standards" 5 | authors = [{name = "Gerivan Costa dos Santos", email = "dean-grumbly-plop@duck.com"}] 6 | license = {text = "MIT"} 7 | readme = "README.md" 8 | requires-python = ">=3.8" 9 | keywords = ["password", "security", "entropy", "generator", "cryptography", "password-manager"] 10 | classifiers = [ 11 | "Programming Language :: Python :: 3", 12 | "Programming Language :: Python :: 3.8", 13 | "Programming Language :: Python :: 3.9", 14 | "Programming Language :: Python :: 3.10", 15 | "Programming Language :: Python :: 3.11", 16 | "Programming Language :: Python :: 3.12", 17 | "License :: OSI Approved :: MIT License", 18 | "Operating System :: OS Independent", 19 | ] 20 | dependencies = ["toml"] 21 | 22 | [project.urls] 23 | Homepage = "https://github.com/gerivanc/entropy-password-generator" 24 | Repository = "https://github.com/gerivanc/entropy-password-generator.git" 25 | Issues = "https://github.com/gerivanc/entropy-password-generator/issues" 26 | Changelog = "https://github.com/gerivanc/entropy-password-generator/blob/main/CHANGELOG.md" 27 | 28 | [project.scripts] 29 | entropy-password-generator = "entropy_password_generator.password_generator:main" 30 | 31 | [build-system] 32 | requires = ["hatchling"] 33 | build-backend = "hatchling.build" 34 | 35 | [tool.hatch.build.targets.wheel] 36 | packages = ["entropy_password_generator"] 37 | -------------------------------------------------------------------------------- /.github/workflows/python-app.yml: -------------------------------------------------------------------------------- 1 | name: EntroPy Password Generator CI 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | pull_request: 7 | branches: [ main ] 8 | 9 | permissions: 10 | contents: read 11 | 12 | jobs: 13 | build: 14 | runs-on: ubuntu-latest 15 | strategy: 16 | matrix: 17 | python-version: ["3.8", "3.10", "3.12"] 18 | 19 | steps: 20 | - uses: actions/checkout@v4 21 | 22 | - name: Debug - Show commit and file content 23 | run: | 24 | echo "Current commit:" 25 | git log -1 26 | echo "Content of password_generator.py:" 27 | cat entropy_password_generator/password_generator.py 28 | 29 | - name: Set up Python ${{ matrix.python-version }} 30 | uses: actions/setup-python@v5 31 | with: 32 | python-version: ${{ matrix.python-version }} 33 | 34 | - name: Install dependencies 35 | run: | 36 | python -m pip install --upgrade pip 37 | pip install flake8 hatchling build 38 | 39 | - name: Lint with flake8 40 | run: | 41 | flake8 entropy_password_generator/password_generator.py --max-line-length=153 --ignore=D,E203,E303,E305,W294 --count --show-source --statistics 42 | 43 | - name: Build package 44 | run: | 45 | python -m build 46 | 47 | - name: Install package locally 48 | run: | 49 | pip install dist/entropy_password_generator-*.whl 50 | 51 | - name: Run script with different modes 52 | run: | 53 | entropy-password-generator --mode 1 54 | entropy-password-generator --mode 12 55 | entropy-password-generator --mode 15 56 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | # EntroPy Password Generator - Bug Report 2 | 3 | Thank you for reporting a bug in the **EntroPy Password Generator**! Please provide detailed information to help us diagnose and fix the issue. See [CONTRIBUTING.md](https://github.com/gerivanc/entropy-password-generator/blob/main/CONTRIBUTING.md) for guidelines. 4 | 5 | --- 6 | 7 | ## 📌 Bug Description 8 | Describe the bug clearly. For example: 9 | - "Running `entropy-password-generator --mode 1` raises an `ImportError`." 10 | 11 | **Description**: 12 | [Enter description here] 13 | 14 | --- 15 | 16 | ## 🔄 Steps to Reproduce 17 | List the steps to reproduce the bug: 18 | 1. Install: `pip install entropy-password-generator`. 19 | 2. Run: `entropy-password-generator --mode 1`. 20 | 3. Observe: `[Error message]`. 21 | 22 | **Steps**: 23 | 1. [Step 1] 24 | 2. [Step 2] 25 | 3. [Step 3] 26 | 27 | --- 28 | 29 | ## ✅ Expected Behavior 30 | Describe what should happen: 31 | - "The command should generate a 24-character password with 139.92 bits of entropy." 32 | 33 | **Expected Behavior**: 34 | [Enter expected behavior here] 35 | 36 | --- 37 | 38 | ## 🖥️ Environment Details 39 | To check versions: 40 | - Python: `python3 --version` 41 | - Project: `entropy-password-generator --version` 42 | 43 | - **Operating System**: [e.g., Ubuntu 24.04] 44 | - **Python Version**: [e.g., 3.10] 45 | - **Project Version**: [e.g., 0.6.4] 46 | - **Installation Method**: [e.g., PyPI] 47 | 48 | --- 49 | 50 | ## 📸 Screenshots or Logs 51 | Include the full stack trace or terminal output: 52 | ```bash 53 | [Insert output or error message here] 54 | ``` 55 | 56 | --- 57 | 58 | ## 🔒 Security Note 59 | For security vulnerabilities, report privately via [SECURITY.md](https://github.com/gerivanc/entropy-password-generator/blob/main/SECURITY.md). 60 | 61 | --- 62 | 63 | **Upvote or comment** to prioritize this bug. Thank you! 🚀🔑 64 | 65 | --- 66 | 67 | #### Copyright © 2025 Gerivan Costa dos Santos 68 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/issue_template.md: -------------------------------------------------------------------------------- 1 | # EntroPy Password Generator - Issue Report 2 | 3 | Thank you for contributing to the **EntroPy Password Generator**! Please fill out the sections below to help us understand and address your issue or suggestion. For guidelines, see our [CONTRIBUTING.md](https://github.com/gerivanc/entropy-password-generator/blob/main/CONTRIBUTING.md). For ideas or general questions, consider using [GitHub Discussions](https://github.com/gerivanc/entropy-password-generator/discussions). 4 | 5 | --- 6 | 7 | ## 📌 Issue Description 8 | Provide a clear and detailed description of the problem or suggestion. For example: 9 | - "Running `entropy-password-generator --mode 1` raises an `ImportError`." 10 | - "Suggest adding support for custom character sets in the CLI." 11 | 12 | **Description**: 13 | [Enter your description here] 14 | 15 | --- 16 | 17 | ## 🔄 Steps to Reproduce 18 | List the steps to reproduce the issue. For example: 19 | 1. Install the package: `pip install entropy-password-generator`. 20 | 2. Run: `entropy-password-generator --mode 1`. 21 | 3. Observe the error: `[Error message]`. 22 | 23 | **Steps**: 24 | 1. [Step 1] 25 | 2. [Step 2] 26 | 3. [Step 3] 27 | 28 | --- 29 | 30 | ## ✅ Expected Behavior 31 | Describe what should happen. For example: 32 | - "The command should generate a 24-character password with lowercase and special characters, with 139.92 bits of entropy." 33 | 34 | **Expected Behavior**: 35 | [Enter expected behavior here] 36 | 37 | --- 38 | 39 | ## 🖥️ Environment Details 40 | Provide details about your environment. To check versions, use: 41 | - Python: `python3 --version` 42 | - Project: `entropy-password-generator --version` or `pip show entropy-password-generator` 43 | 44 | - **Operating System**: [e.g., Ubuntu 24.04, Windows 11, macOS Sonoma] 45 | - **Python Version**: [e.g., 3.8, 3.10, 3.12] 46 | - **Project Version**: [e.g., 0.6.4 from PyPI] 47 | - **Installation Method**: [e.g., PyPI, Test PyPI, cloned repository] 48 | - **Additional Context**: [e.g., dependencies, terminal output, system configurations] 49 | 50 | --- 51 | 52 | ## 📸 Screenshots or Logs 53 | Include screenshots, terminal output, or stack traces. For errors, include the full stack trace. Example: 54 | ```bash 55 | $ entropy-password-generator --mode 1 56 | Traceback (most recent call last): 57 | File "...", line X, in 58 | ... 59 | ImportError: No module named 'xyz' 60 | ``` 61 | 62 | **Logs/Screenshots**: 63 | ```bash 64 | [Insert terminal output or error message here] 65 | ``` 66 | 67 | --- 68 | 69 | ## 🛠️ Possible Solutions 70 | Share ideas for resolving the issue. For example: 71 | - "Check for missing dependencies in `pyproject.toml`." 72 | - "Add a validation step for CLI arguments." 73 | 74 | **Suggestions**: 75 | [Enter suggestions here] 76 | 77 | --- 78 | 79 | ## 🔗 Related Links 80 | Provide links to related issues, documentation, or discussions. For example: 81 | - [CHANGELOG.md](https://github.com/gerivanc/entropy-password-generator/blob/main/CHANGELOG.md) 82 | - Related issue: #[Issue number] 83 | 84 | **Links**: 85 | [Enter links here] 86 | 87 | --- 88 | 89 | ## 💡 Additional Information 90 | Include other details, such as: 91 | - Frequency (e.g., always, intermittent). 92 | - Workarounds attempted. 93 | - Impact (e.g., blocks CLI execution, affects specific modes). 94 | 95 | **Details**: 96 | [Enter additional information here] 97 | 98 | --- 99 | 100 | ## 🔒 Security Note 101 | If this issue involves a security vulnerability, please follow the instructions in [SECURITY.md](https://github.com/gerivanc/entropy-password-generator/blob/main/SECURITY.md) to report it privately instead of posting here. 102 | 103 | --- 104 | 105 | **Upvote or comment** if this issue affects you to help us prioritize it. Thank you for helping improve the **EntroPy Password Generator**! 🚀🔑 106 | 107 | --- 108 | 109 | #### Copyright © 2025 Gerivan Costa dos Santos 110 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## ✅ Supported Versions 4 | 5 | The following versions of the EntroPy Password Generator are currently supported with security updates. Unsupported versions will not receive patches for vulnerabilities. To check your installed version, run `entropy-password-generator --version`. 6 | 7 | | Version | Supported | End-of-Life Date | 8 | |---------|--------------------|------------------------| 9 | | 0.6.x | :white_check_mark: | TBD (Est. August 2026) | 10 | | 0.5.x | :white_check_mark: | January 31, 2026 | 11 | | < 0.5 | :x: | - | 12 | 13 | ## 🧪 Test PyPI Usage 14 | 15 | The Test PyPI release of EntroPy Password Generator is intended for testing and development purposes only. It may contain experimental features or unpatched vulnerabilities and should not be used in production environments. For production use, install the stable version from the official [Python Package Index (PyPI)](https://pypi.org/project/entropy-password-generator/). 16 | 17 | ## 🛡️ Security Best Practices 18 | 19 | To ensure the secure use of EntroPy Password Generator: 20 | - Use Python 3.8 or higher, keeping it updated to the latest patch version. 21 | - Install the tool in a virtual environment to isolate dependencies. 22 | - Verify package integrity during installation by checking the package's hash or signature (available on the [PyPI project page](https://pypi.org/project/entropy-password-generator/)). 23 | - Store generated passwords securely using a trusted password manager, such as [Bitwarden](https://bitwarden.com/). 24 | 25 | ## 🚨 Reporting a Vulnerability 26 | 27 | If you discover a security vulnerability in the EntroPy Password Generator, please report it promptly to protect the community. We consider vulnerabilities such as cryptographic weaknesses, insecure random number generation, or code execution flaws within scope. Follow these steps: 28 | 29 | 1. **Where to Report**: Email [dean-grumbly-plop@duck.com](mailto:dean-grumbly-plop@duck.com) with a detailed description of the vulnerability, including steps to reproduce, impact, and affected versions. For sensitive reports, request our PGP key for encrypted communication. 30 | 2. **Expected Response Time**: You will receive an acknowledgment within 48 hours. A detailed update, including assessment and resolution plan, will be provided within 7 business days. 31 | 3. **Resolution Process**: 32 | - **Accepted Vulnerabilities**: We will prioritize a fix based on severity (e.g., critical issues patched within 30 days) and deploy it in the next supported release. We may coordinate with CVE authorities for public disclosure. 33 | - **Declined Vulnerabilities**: If the issue is not reproducible, out of scope, or not a vulnerability, you will be notified with an explanation. 34 | 4. **Responsible Disclosure Timeline**: 35 | - Acknowledgment: Within 48 hours. 36 | - Initial assessment: Within 7 business days. 37 | - Patch release: Within 30–60 days, depending on severity. 38 | - Public disclosure: Coordinated with the reporter, typically after the patch is released. 39 | 5. **Confidentiality**: Do not disclose the vulnerability publicly until we have resolved it and provided clearance. Responsible reporters may be acknowledged publicly (with consent) in release notes or a project "Hall of Fame." 40 | 6. **Contact for Queries**: For questions about the process, email [dean-grumbly-plop@duck.com](mailto:dean-grumbly-plop@duck.com). 41 | 42 | ## 📚 Additional Resources 43 | 44 | - [README.md](https://github.com/gerivanc/entropy-password-generator/blob/main/README.md) for project overview and installation. 45 | - [RELEASE.md](https://github.com/gerivanc/entropy-password-generator/blob/main/RELEASE.md) for version-specific details. 46 | - [CONTRIBUTING.md](https://github.com/gerivanc/entropy-password-generator/blob/main/CONTRIBUTING.md) for contribution guidelines. 47 | - [OWASP Secure Coding Practices](https://owasp.org/www-project-secure-coding-practices-quick-reference-guide/) for general security guidance. 48 | - [NIST SP 800-63B](https://pages.nist.gov/800-63-3/sp800-63b.html) for password strength standards. 49 | 50 | We appreciate your cooperation in responsibly reporting vulnerabilities to maintain the security of the EntroPy Password Generator. 51 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to EntroPy Password Generator 2 | 3 | Thank you for your interest in contributing to the **EntroPy Password Generator**! This project provides a secure and customizable password generation tool, compliant with Proton© and NIST standards, and we welcome contributions to enhance its functionality, documentation, and accessibility. Whether you're fixing bugs, adding features, improving documentation, or contributing in other ways, your efforts are greatly appreciated. 4 | 5 | --- 6 | 7 | ## 🤝 Ways to Contribute 8 | 9 | You can contribute to the EntroPy Password Generator in several ways: 10 | - **Code**: Fix bugs, add new features, or optimize existing functionality in `password_generator.py`. 11 | - **Documentation**: Improve `README.md`, `SECURITY.md`, `RELEASE.md`, or add inline comments and docstrings. 12 | - **Issues**: Report bugs, suggest features, or propose documentation enhancements via GitHub Issues. 13 | - **Translations**: Translate documentation or CLI messages to other languages. 14 | - **Media**: Create or update screenshots, logos, or other visual assets for the project. 15 | - **Testing**: Validate functionality across different Python versions or platforms. 16 | 17 | --- 18 | 19 | ## 🚀 Getting Started 20 | 21 | ### ⚙️ 1. Setting Up Your Environment 22 | To contribute, set up a local development environment: 23 | 1. **Install Python**: Ensure you have Python 3.8 or higher installed, as specified in `pyproject.toml`. 24 | 2. **Clone the repository**: 25 | ```bash 26 | git clone https://github.com/gerivanc/entropy-password-generator.git 27 | cd entropy-password-generator 28 | ``` 29 | 3. **Create a virtual environment**: 30 | ```bash 31 | python3 -m venv .venv 32 | source .venv/bin/activate 33 | ``` 34 | **On Windows**: 35 | ```bash 36 | python -m venv entropy_venv 37 | .\entropy_venv\Scripts\Activate.ps1 38 | ``` 39 | 4. **Install development tools** (optional, but recommended): 40 | ```bash 41 | pip install flake8 black isort 42 | ``` 43 | These tools help ensure code quality: 44 | - `flake8`: Linting to enforce PEP 8. 45 | - `black`: Automatic code formatting. 46 | - `isort`: Sorting imports. 47 | 48 | ### 📢 2. Reporting Issues 49 | If you find a bug, have a feature request, or notice documentation that needs improvement: 50 | - **Search existing issues**: Check the [GitHub Issues page](https://github.com/gerivanc/entropy-password-generator/issues) to avoid duplicates. 51 | - **Use templates**: Follow the issue templates in `.github/ISSUE_TEMPLATE/` for bug reports or feature requests. 52 | - **Provide details**: Include a clear title, description, steps to reproduce (if applicable), expected behavior, and screenshots or logs. 53 | - **Security issues**: For vulnerabilities, follow the process in [SECURITY.md](https://github.com/gerivanc/entropy-password-generator/blob/main/SECURITY.md) instead of opening a public issue. 54 | 55 | ### 🔄 3. Submitting Pull Requests 56 | To contribute code, documentation, or other changes, submit a pull request (PR): 57 | 1. **Fork the repository**: 58 | - Click the "Fork" button on the [repository page](https://github.com/gerivanc/entropy-password-generator). 59 | - Clone your fork: 60 | ```bash 61 | git clone https://github.com/gerivanc/entropy-password-generator.git 62 | cd entropy-password-generator 63 | ``` 64 | 2. **Create a branch**: 65 | - Use a descriptive name (e.g., `feature/add-new-mode`, `fix/bug-entropy-calc`): 66 | ```bash 67 | git checkout -b feature/your-feature-name 68 | ``` 69 | 3. **Make changes**: 70 | - Follow the coding standards below. 71 | - Test changes locally (see "Testing" section). 72 | - Update documentation (e.g., `README.md`, docstrings) if necessary. 73 | - Run linting and formatting tools: 74 | ```bash 75 | flake8 entropy_password_generator/ 76 | black entropy_password_generator/ 77 | isort entropy_password_generator/ 78 | ``` 79 | 4. **Commit changes**: 80 | - Use clear, concise commit messages following the [Conventional Commits](https://www.conventionalcommits.org/) format (e.g., `feat: add new password mode`, `fix: correct entropy calculation`): 81 | ```bash 82 | git commit -m "feat: describe your change" 83 | ``` 84 | 5. **Push to your fork**: 85 | ```bash 86 | git push origin feature/your-feature-name 87 | ``` 88 | 6. **Open a pull request**: 89 | - Go to the [repository](https://github.com/gerivanc/entropy-password-generator) and click "New pull request". 90 | - Select your branch and provide a detailed description of your changes. 91 | - Reference related issues (e.g., "Fixes #123"). 92 | - Ensure your PR passes the GitHub Actions CI checks (if configured). 93 | 94 | ### 📜 4. Coding Standards 95 | To maintain consistency and security, adhere to these guidelines: 96 | - **Python Version**: Use Python 3.8 or higher, as specified in `pyproject.toml`. 97 | - **Style**: Follow [PEP 8](https://www.python.org/dev/peps/pep-0008/) for code style. Use `flake8` for linting and `black` for formatting. 98 | - **Docstrings**: Write clear, English docstrings in [Google style](https://google.github.io/styleguide/pyguide.html) for all functions and modules. 99 | - **Security**: Use the `secrets` module for cryptographic randomness. Avoid insecure libraries like `random`. If introducing new dependencies, justify their necessity and security. 100 | - **File Structure**: Keep changes within the existing structure (e.g., core logic in `entropy_password_generator/password_generator.py`). 101 | - **Licensing**: By contributing, you agree that your contributions are licensed under the [MIT License](https://github.com/gerivanc/entropy-password-generator/blob/main/LICENSE.md). 102 | 103 | ### 🧪 5. Testing 104 | Ensure your changes do not break existing functionality: 105 | - **Manual Testing**: 106 | - Run the CLI with different modes and configurations: 107 | ```bash 108 | python3 entropy_password_generator/password_generator.py --mode 1 109 | python3 entropy_password_generator/password_generator.py --length 15 --no-special 110 | ``` 111 | - If the package is installed (e.g., from Test PyPI): 112 | ```bash 113 | entropy-password-generator --mode 1 114 | ``` 115 | - Note: Use the direct path (`python3 entropy_password_generator/password_generator.py`) or CLI command (`entropy-password-generator`) to avoid `RuntimeWarning` issues with `python -m`. 116 | - **Cross-Version Testing**: 117 | - Test with Python 3.8, 3.10, and 3.12 to ensure compatibility. Use tools like `tox` or a GitHub Actions matrix if available. 118 | - **Automated Tests**: 119 | - Currently, the project does not include automated tests. If adding tests, use `pytest` and place them in a `tests/` directory. Example: 120 | ```bash 121 | pip install pytest 122 | pytest tests/ 123 | ``` 124 | - Contributions that add test coverage are highly encouraged. 125 | - **Validation**: 126 | - Verify that new modes or configurations align with the `MODES` dictionary in `password_generator.py`. 127 | - Check that entropy calculations remain accurate and compliant with Proton© (75+ bits) and NIST standards. 128 | 129 | ### ✅ 6. Pull Request Review Process 130 | After submitting a PR: 131 | - **Review Time**: The maintainer will review your PR within 7 business days. Complex changes may take longer. 132 | - **Criteria**: PRs are evaluated based on code quality, adherence to standards, security, and alignment with project goals. 133 | - **Feedback**: You may be asked to make revisions. Address feedback promptly to expedite merging. 134 | - **Approval**: PRs require approval from the maintainer (Gerivan Costa dos Santos) before merging. 135 | - **CI Checks**: Ensure all GitHub Actions checks (if configured) pass. Fix any failures reported in the workflow. 136 | 137 | ### 🤗 7. Code of Conduct 138 | We are committed to fostering an inclusive and respectful community. Please: 139 | - Be kind, respectful, and professional in all interactions. 140 | - Avoid offensive language, harassment, or discriminatory behavior. 141 | - Report inappropriate behavior to the maintainer at [dean-grumbly-plop@duck.com](mailto:dean-grumbly-plop@duck.com). 142 | Violations may result in exclusion from the project. 143 | 144 | ### ❓ 8. Getting Help 145 | For questions or assistance: 146 | - Read the [README.md](https://github.com/gerivanc/entropy-password-generator/blob/main/README.md) for project details. 147 | - Check the [SECURITY.md](https://github.com/gerivanc/entropy-password-generator/blob/main/SECURITY.md) for vulnerability reporting. 148 | - Open an issue on the [GitHub Issues page](https://github.com/gerivanc/entropy-password-generator/issues). 149 | - Contact the maintainer at [dean-grumbly-plop@duck.com](mailto:dean-grumbly-plop@duck.com). 150 | 151 | ### 🙌 9. Acknowledgments 152 | Thank you for contributing to the **EntroPy Password Generator**! Your efforts help make this tool more secure, accessible, and valuable for users worldwide. Significant contributors may be acknowledged in the project’s documentation or release notes (with your consent). 153 | 154 | --- 155 | 156 | #### Copyright © 2025 Gerivan Costa dos Santos 157 | -------------------------------------------------------------------------------- /RELEASE.md: -------------------------------------------------------------------------------- 1 | # Release to EntroPy Password Generator v0.6.4 2 | 3 | 🔸 **Release Date:** August 07th, 2025 4 | 5 | 🔸 Released on 2025/05/02 6 | 7 | 🔸 Last updated 2025/08/07 8 | 9 | - Publisher [gerivanc](https://github.com/gerivanc/) 10 | 11 | - Changelog [Changelog](https://github.com/gerivanc/entropy-password-generator/blob/main/CHANGELOG.md) 12 | 13 | - Release Notes [RELEASE.md](https://github.com/gerivanc/entropy-password-generator/blob/main/RELEASE.md) 14 | 15 | - Reporting Issues [Report a](https://github.com/gerivanc/entropy-password-generator/issues/new/choose) 16 | 17 | --- 18 | 19 | # 📋 Overview 20 | The **EntroPy Password Generator** v0.6.4 is now available on [Test PyPI](https://test.pypi.org/project/entropy-password-generator/) and [PyPI](https://pypi.org/project/entropy-password-generator/)! This release builds on the improvements from v0.6.4, adding a GitHub Actions badge to the project documentation to reflect the status of CI/CD workflows and updating the version references to v0.6.4. It continues to provide 20+ secure password generation modes, with entropies from 97.62 to 833.00 bits, exceeding Proton© and NIST standards. 21 | 22 | --- 23 | 24 | # ✨ What's New 25 | - Updated version references in `README.md` from `0.6.3` to `0.6.4`. Updates to all layout structures and section titles. 26 | - Adjusted layout styling and emoji use for better readability and visual identity. 27 | - Corrected anchor links in the Table of Contents that were not functioning due to emoji or formatting conflicts. 28 | 29 | --- 30 | 31 | # 📦 Install in simulated environment 32 | 33 | ### 🛠️ Installation Options for use in virtual environments on Test PyPI and PyPI (Stable Version) on Kali Linux. 34 | 35 | ## 📝 Overview 36 | The `entropy-password-generator` package can be installed from PyPI (Stable Version) or Test PyPI (Development Version) using a virtual environment. The automated installation scripts have been tested and confirmed to work successfully on **Parrot OS**. On **Kali Linux**, due to system-specific configurations, the automated scripts may encounter issues. For successful installation on Kali Linux, use the simplified manual installation steps provided below. 37 | 38 | ## 📦 Stable Version Installation (PyPI) 39 | 40 | To install the stable version from PyPI on Kali Linux, execute the following commands step-by-step: 41 | 42 | ```bash 43 | python3 -m venv venv-stablepypi 44 | source venv-stablepypi/bin/activate 45 | python -m ensurepip --upgrade 46 | pip install --upgrade pip 47 | pip install entropy-password-generator 48 | pip list 49 | ``` 50 | 51 | ## 🧪 Development Version Installation (Test PyPI) 52 | 53 | To install the development version from Test PyPI on Kali Linux, execute the following commands step-by-step: 54 | 55 | ```bash 56 | python3 -m venv venv-testpypi 57 | source venv-testpypi/bin/activate 58 | python -m ensurepip --upgrade 59 | pip install --upgrade pip 60 | pip install -i https://test.pypi.org/simple/ --trusted-host test.pypi.org entropy-password-generator 61 | pip list 62 | ``` 63 | 64 | --- 65 | 66 | ### 📋 Notes 67 | - These manual steps ensure the creation of a virtual environment, activation, and installation of the package from either PyPI or Test PyPI without errors. 68 | - For exclusive software deals and tools for developers, check out [Dealsbe - Exclusive Software Deals for Developers and Startups](https://dealsbe.com). 69 | - For further assistance or troubleshooting, please refer to the project documentation or contact the support team. 70 | 71 | --- 72 | 73 | ### 🛠️ Installation Options for use in virtual environments on Test PyPI and PyPI (Stable Version) on Parrot OS. 74 | 75 | ## 📝 Overview 76 | To avoid conflicts with the system, install it in a virtual environment, such as Kali Linux and/or Parrot. 77 | The **EntroPy Password Generator** can be installed from the Python Package Index (PyPI) for the stable release or from the Test Python Package Index (Test PyPI) to test the latest development version. Follow the instructions below based on your needs. 78 | 79 | ## 🔧 Installation from PyPI (Stable Version) 80 | To install the latest stable version of the EntroPy Password Generator (version 0.6.4) from PyPI, run the following command: 81 | 82 | ```bash 83 | #!/bin/bash 84 | 85 | # Exit immediately if any command fails 86 | set -e 87 | 88 | echo "🔧 Creating virtual environment: venv-stablepypi..." 89 | python3 -m venv venv-stablepypi 90 | 91 | echo "✅ Virtual environment created successfully." 92 | 93 | echo "⚙️ Activating virtual environment..." 94 | source venv-stablepypi/bin/activate 95 | 96 | echo "🔄 Ensuring pip is available in the environment..." 97 | python -m ensurepip --upgrade 98 | 99 | echo "⬆️ Upgrading pip to the latest version..." 100 | pip install --upgrade pip 101 | 102 | echo "📦 Installing the entropy-password-generator package from PyPI..." 103 | pip install entropy-password-generator 104 | 105 | echo "📋 Listing installed packages:" 106 | pip list 107 | 108 | echo "🚀 Installation completed successfully!" 109 | ``` 110 | 111 | This command installs the package globally or in your active Python environment. After installation, you can run the generator using the following commands: 112 | 113 | Generate a custom length password of 15 ambiguous characters: 114 | ```bash 115 | entropy-password-generator --length 15 --with-ambiguous 116 | ``` 117 | 118 | or 119 | 120 | Generate a password with default mode 20: 121 | ```bash 122 | entropy-password-generator --mode 20 123 | ``` 124 | 125 | When finished, deactivate the virtual environment.: 126 | ```bash 127 | deactivate 128 | ``` 129 | 130 | Visit the [PyPI project page](https://pypi.org/project/entropy-password-generator/) for additional details about the stable release. 131 | 132 | ## 🔧 Installation from Test PyPI (Development Version) 133 | To test the latest development version of the EntroPy Password Generator, install it from the Test Python Package Index (Test PyPI): 134 | 135 | ```bash 136 | #!/bin/bash 137 | 138 | # Exit immediately if any command fails 139 | set -e 140 | 141 | echo "🔧 Creating virtual environment: venv-testpypi..." 142 | python3 -m venv venv-testpypi 143 | 144 | echo "✅ Virtual environment created successfully." 145 | 146 | echo "⚙️ Activating virtual environment..." 147 | source venv-testpypi/bin/activate 148 | 149 | echo "🔄 Ensuring pip is available in the environment..." 150 | python -m ensurepip --upgrade 151 | 152 | echo "⬆️ Upgrading pip to the latest version..." 153 | pip install --upgrade pip 154 | 155 | echo "📦 Installing the entropy-password-generator package from Test PyPI..." 156 | pip install -i https://test.pypi.org/simple/ --trusted-host test.pypi.org entropy-password-generator 157 | 158 | echo "📋 Listing installed packages:" 159 | pip list 160 | 161 | echo "🚀 Installation completed successfully!" 162 | ``` 163 | 164 | This command installs the package globally or in your active Python environment. After installation, you can run the generator using the following commands: 165 | 166 | Generate a custom length password of 42 ambiguous characters: 167 | ```bash 168 | entropy-password-generator --length 42 --with-ambiguous 169 | ``` 170 | 171 | or 172 | 173 | Generate a password with default mode 11: 174 | ```bash 175 | entropy-password-generator --mode 11 176 | ``` 177 | 178 | When finished, deactivate the virtual environment.: 179 | ```bash 180 | deactivate 181 | ``` 182 | 183 | Visit the [Test PyPI project page](https://test.pypi.org/project/entropy-password-generator/) for additional details about the development version. 184 | 185 | > **Note:** the execution of the `--mode` and `--length` scripts, as demonstrated in the previous options such as: `entropy-password-generator --mode 11` and `entropy-password-generator --length 42 --with-ambiguous`, are specific for use in the active virtual environment. Do not use > > them after cloning the repository via CLI directly without the active virtual environment, if you use them you will receive an error message such as: `entropy-password-generator: command not found`. 186 | > 187 | > To use the `--mode` and `--length` scripts used via CLI directly after cloning the repository without activating the virtual environment, 188 | > use the scripts such as: `python3 entropy_password_generator/password_generator.py --mode 11` (mode 1 to 20) and custom mode `python3 entropy_password_generator/password_generator.py --length 42 --with-ambiguous` (using custom 15 to 128 characters). 189 | 190 | --- 191 | 192 | ## 🖥️ Getting Started on Windows 193 | For Windows users, a dedicated guide is available to help you install and use the **EntroPy Password Generator** via **PowerShell**. This step-by-step tutorial covers installation, configuration, and password generation with clear examples tailored for the Windows environment, including detailed instructions for setting up Git and running the generator. Check out the [**GETTING_STARTED_WINDOWS.md**](https://github.com/gerivanc/entropy-password-generator/blob/main/GETTING_STARTED_WINDOWS.md) for comprehensive guidance. 194 | 195 | --- 196 | 197 | ## 📬Feedback 198 | Help us improve by reporting issues using our [issue template](https://github.com/gerivanc/entropy-password-generator/blob/main/.github/ISSUE_TEMPLATE/issue_template.md). 199 | 200 | Thank you for supporting **EntroPy Password Generator**! 🚀🔑 201 | 202 | --- 203 | 204 | #### Copyright © 2025 Gerivan Costa dos Santos 205 | -------------------------------------------------------------------------------- /PASSWORDENTROPYCALCULATION.md: -------------------------------------------------------------------------------- 1 | # Password Entropy Calculation 2 | ![Badge: Entropy Compliant](https://img.shields.io/badge/Entropy%20Compliant-Proton%C2%A9%20%26%20NIST-brightgreen) 3 | 4 | --- 5 | 6 | ## 🔍 Overview 7 | 8 | The **EntroPy Password Generator** creates passwords with high entropy to maximize resistance against brute-force attacks. Entropy measures password strength, indicating the computational effort required to guess a password. All 20 generation modes produce passwords exceeding the Proton© (75 bits) and NIST (80+ bits) recommendations, ensuring robust security for applications ranging from personal accounts to cryptographic keys. 9 | 10 | --- 11 | 12 | ## 📊 How Entropy is Calculated 13 | 14 | The generator uses the standard entropy formula: 15 | 16 | \[ E(R) = \log_2(R^L) \] 17 | 18 | where: 19 | - **R**: Number of possible characters (character set size). 20 | - **L**: Password length. 21 | - **E(R)**: Entropy in bits. 22 | 23 | Simplified: 24 | - Entropy = \(\log_2(\text{charset size}) \times \text{password length}\) 25 | - Higher entropy means exponentially greater effort to crack the password. 26 | 27 | > **Note**: Entropy values are theoretical maximums, assuming uniform random selection via Python's `secrets` module. The requirement of at least one character per selected type (e.g., uppercase, lowercase) slightly reduces effective entropy for shorter passwords (e.g., 15 characters). This reduction is negligible for the lengths used (15–128 characters), and all modes exceed Proton© and NIST standards. 28 | 29 | To validate entropy locally, run a mode and check the output: 30 | ```bash 31 | python3 entropy_password_generator/password_generator.py --mode 1 32 | ``` 33 | 34 | --- 35 | 36 | ## 🔒 Security Benchmarks 37 | 38 | | Source | Minimum Recommended Entropy | Context | 39 | |:------|:-----------------------------|:--------| 40 | | **Proton©** | 75 bits | General password strength ([source](https://proton.me/blog/what-is-password-entropy)) | 41 | | **NIST (SP 800-63B)** | 80+ bits | Passwords protecting sensitive data ([source](https://pages.nist.gov/800-63-3/sp800-63b.html)) | 42 | 43 | > **Note**: For highly sensitive accounts (e.g., financial, administrative), aim for **100+ bits** of entropy. 44 | 45 | --- 46 | 47 | ## 🚀 Project Capabilities 48 | 49 | ### Password Generation Modes 50 | The generator offers 20+ modes for secure password generation, divided into three blocks: 51 | 52 | - **Block I (Modes 1–10)**: Fixed length (24 characters), includes ambiguous characters (e.g., `I`, `l`, `O`, `0`), balancing readability and security. Ideal for general-purpose passwords. 53 | - **Block II (Modes 11–20)**: Varying lengths (15–128 characters), mostly excluding ambiguous characters (`I`, `l`, `O`, `0`, `1`, `` ` ``). Suitable for sensitive applications. 54 | - **Block III (Using Custom Configuration)**: Lengths from 15–128 characters, with or without ambiguous characters, using `--length` and `--with-ambiguous`. 55 | 56 | The table below details each mode, with character set sizes (\( R \)), entropy, and use cases. Ambiguous characters are excluded unless specified. 57 | 58 | | Mode | Password Length | Character Set | R (Charset Size) | Entropy (bits) | Security Level | Use Case | 59 | |------|-----------------|---------------|------------------|----------------|----------------|----------| 60 | | 11 | 15 | Full (no ambiguous) | 94 | 95.10 | Strong | Personal accounts | 61 | | 13 | 20 | Lowercase + Digits (no ambiguous) | 36 | 99.08 | Strong | Basic logins | 62 | | 14 | 20 | Uppercase + Digits (no ambiguous) | 36 | 99.08 | Strong | Device authentication | 63 | | 12 | 18 | Full (with ambiguous) | 95 | 117.14 | Very Strong | Professional accounts | 64 | | 4 | 24 | Uppercase + Digits (with ambiguous) | 36 | 124.08 | Very Strong | Legacy systems | 65 | | 5 | 24 | Lowercase + Digits (with ambiguous) | 36 | 124.08 | Very Strong | Readable passwords | 66 | | 6 | 24 | Digits + Special (with ambiguous) | 43 | 126.85 | Very Strong | API tokens | 67 | | 3 | 24 | Uppercase + Lowercase (with ambiguous) | 52 | 136.81 | Very Strong | Website logins | 68 | | 1 | 24 | Lowercase + Special (with ambiguous) | 59 | 138.75 | Very Strong | Secure notes | 69 | | 2 | 24 | Uppercase + Special (with ambiguous) | 59 | 138.75 | Very Strong | Admin access | 70 | | 7 | 24 | Uppercase + Lowercase + Digits (with ambiguous) | 62 | 142.90 | Very Strong | System credentials | 71 | | 9 | 24 | Uppercase + Digits + Special (with ambiguous) | 69 | 144.54 | Very Strong | Database keys | 72 | | 10 | 24 | Lowercase + Digits + Special (with ambiguous) | 69 | 144.54 | Very Strong | File encryption | 73 | | 8 | 24 | Uppercase + Lowercase + Special (with ambiguous) | 85 | 151.16 | Extremely Strong | High-security logins | 74 | | 15 | 24 | Full (no ambiguous) | 94 | 152.16 | Extremely Strong | Enterprise passwords | 75 | | 16 | 32 | Full (no ambiguous) | 94 | 202.88 | Cryptographic Grade | API keys | 76 | | 17 | 42 | Full (no ambiguous) | 94 | 266.27 | Cryptographic Grade | Server tokens | 77 | | 18 | 60 | Full (no ambiguous) | 94 | 380.39 | Ultra Secure | Financial credentials | 78 | | 19 | 75 | Full (no ambiguous) | 94 | 475.49 | Ultra Secure | Password manager keys | 79 | | 20 | 128 | Full (no ambiguous) | 94 | 811.50 | Ultra Secure | Cryptographic keys | 80 | 81 | **Notes**: 82 | - Full character set (no ambiguous): 26 uppercase + 26 lowercase + 10 digits + 32 symbols = 94 characters. 83 | - Ambiguous characters: `I`, `l`, `O`, `0`, `1`, `` ` ``. 84 | 85 | --- 86 | 87 | ### 💻 Example Passwords 88 | Below are sample passwords for select modes: 89 | 90 | #### Block I (Length 24, with ambiguous) 91 | **Mode 1: Lowercase + Special** 92 | ```bash 93 | python3 entropy_password_generator/password_generator.py --mode 1 94 | ``` 95 | ``` 96 | Generated password: &]*yl>fhqs*e<.+fl=~ijy-i 97 | Entropy: 138.75 bits 98 | ``` 99 | 100 | **Mode 8: Uppercase + Lowercase + Special** 101 | ```bash 102 | python3 entropy_password_generator/password_generator.py --mode 8 103 | ``` 104 | ``` 105 | Generated password: NmP^*FVtMw7;t\yNK.^_@DZpQ\\K,B}qKRZ}3&}Tp&QP^H>M]<4Fb(*Wn7%U42t% 125 | Entropy: 832.87 bits 126 | ``` 127 | 128 | #### Block III (Custom Configuration) 129 | **Wi-Fi Password (15 chars, with ambiguous)** 130 | ```bash 131 | python3 entropy_password_generator/password_generator.py --length 15 132 | ``` 133 | ``` 134 | Generated password: t3FoI^XNvyuZ{Ui 135 | Entropy: 98.57 bits 136 | ``` 137 | 138 | **Cryptographic Key (128 chars, with ambiguous)** 139 | ```bash 140 | python3 entropy_password_generator/password_generator.py --length 128 --with-ambiguous 141 | ``` 142 | ``` 143 | Generated password: [:I^+1GPk`>6YIAE\[z%mvN25I,Q{n9[k#Mhtdhffol4?F1b,, 144 | Entropy: 833.00 bits 145 | ``` 146 | 147 | --- 148 | 149 | ## 🛡️ Why High Entropy Matters 150 | - **< 50 bits**: Vulnerable, crackable in seconds. 151 | - **50–75 bits**: Moderately secure, risky for high-value targets. 152 | - **75–100 bits**: Strong, suitable for personal and professional use. 153 | - **> 100 bits**: Very strong, ideal for sensitive applications. 154 | 155 | High entropy mitigates: 156 | - Brute-force attacks (online/offline). 157 | - Credential stuffing. 158 | - Rainbow table attacks (with salting). 159 | 160 | --- 161 | 162 | ## 📱 Practical Applications in Mobile Devices 163 | The table below compares mobile authentication methods to EntroPy's passwords: 164 | 165 | | Method | Entropy | Combinations | Security | Crack Time | Use Case | 166 | |--------|---------|--------------|----------|------------|----------| 167 | | Pattern 3x3 | 9–18 bits | 389,000 | Very low | Seconds | Casual use | 168 | | 4-Digit PIN | 13.3 bits | 10,000 | Very weak | < 1s | Not recommended | 169 | | 6-Digit PIN | 19.9 bits | 1,000,000 | Weak | 1–2 min | Temporary use | 170 | | 8-Character Alphanumeric | 59.5 bits | 8.4 × 10¹⁷ | Very good | Days | Professionals | 171 | | EntroPy Mode 11 (15 chars) | 97.62 bits | ~10²⁹ | Extremely high | Years | Sensitive data | 172 | 173 | --- 174 | 175 | ## 📚 References 176 | - [Proton© Blog](https://proton.me/blog/what-is-password-entropy) 177 | - [NIST SP 800-63B](https://pages.nist.gov/800-63-3/sp800-63b.html) 178 | - [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf) 179 | - [OWASP Authentication Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Authentication_Cheat_Sheet.html) 180 | - [Have I Been Pwned](https://haveibeenpwned.com/Passwords) 181 | 182 | --- 183 | 184 | ## 📝 Final Note 185 | The EntroPy Password Generator uses Python's `secrets` module for cryptographic randomization, ensuring passwords exceed Proton© and NIST standards. Store passwords in a secure password manager like [Bitwarden©](https://bitwarden.com/) and use 2FA for optimal security. 186 | 187 | --- 188 | 189 | #### Copyright © 2025 Gerivan Costa dos Santos 190 | -------------------------------------------------------------------------------- /GETTING_STARTED_WINDOWS.md: -------------------------------------------------------------------------------- 1 | # Getting Started with EntroPy Password Generator on Windows PowerShell 2 | 3 | Welcome to the **EntroPy Password Generator**, a secure and customizable tool for generating robust passwords! This guide provides step-by-step instructions for installing and using the **EntroPy Password Generator** via the Windows PowerShell command-line interface (CLI). Whether you're securing personal accounts or generating cryptographic keys, this guide will help you get started quickly and efficiently. 4 | 5 | --- 6 | 7 | ## 📋 Prerequisites 8 | 9 | Before diving in, ensure your Windows environment is ready: 10 | 11 | - **Operating System**: Windows 10 or later (PowerShell 7.5 or higher is included by default). 12 | - **Python**: Version 3.8 or higher installed. Download it from [python.org](https://www.python.org/downloads/) if needed. 13 | - **pip**: Python's package manager, typically included with Python. Verify by running: 14 | ```powershell 15 | pip --version 16 | ``` 17 | If not installed, follow the [official pip installation guide](https://pip.pypa.io/en/stable/installation/). 18 | - **PowerShell**: Use Windows PowerShell (pre-installed) or PowerShell Core (download from [Microsoft](https://learn.microsoft.com/en-us/powershell/)). 19 | - **Internet Connection**: Required for downloading the package from PyPI or cloning the repository. 20 | 21 | --- 22 | 23 | ## 🛠️ Installation Options 24 | 25 | There are two primary ways to install **EntroPy Password Generator** on Windows: via **PyPI** for the stable version or by **cloning the repository** from GitHub. Below, we detail both methods using PowerShell. 26 | 27 | ### Option 1: Install from PyPI (Stable Version) 28 | 29 | This is the easiest method to get started with the latest stable release. Visit the [PyPI project page](https://pypi.org/project/entropy-password-generator/) for additional details on the latest development release. 30 | 31 | 1. **Open PowerShell**: 32 | - Press `Win + S`, type `PowerShell`, and select **Windows PowerShell**. 33 | - Alternatively, press `Win + R`, type `powershell`, and hit Enter. 34 | 35 | 2. **Create a Virtual Environment (Recommended)**: 36 | Virtual environments prevent conflicts with system-wide Python packages. 37 | ```powershell 38 | python -m venv entropy_venv 39 | .\entropy_venv\Scripts\Activate.ps1 40 | ``` 41 | After activation, you’ll see `(entropy_venv)` in your PowerShell prompt. 42 | 43 | 3. **Install EntroPy Password Generator**: 44 | ```powershell 45 | pip install entropy-password-generator 46 | ``` 47 | This installs the package globally or within the active virtual environment. 48 | 49 | 4. **Verify Installation**: 50 | ```powershell 51 | entropy-password-generator --help 52 | ``` 53 | If successful, you’ll see the CLI help menu with available options. 54 | 55 | ### Option 2: Install from GitHub Repository 56 | 57 | This method is ideal for users who want to explore the source code or contribute to the project. Since many users may be unfamiliar with Git, we’ll provide detailed steps to install and use it. 58 | 59 | 1. **Install Git**: 60 | - **Download Git**: Visit [git-scm.com](https://git-scm.com/download/win) and download the latest version of Git for Windows. 61 | - **Run the Installer**: 62 | - Follow the installation wizard, accepting the default settings unless you have specific preferences. 63 | - Ensure the option “Add Git to PATH” is selected (usually enabled by default) to make Git accessible in PowerShell. 64 | - **Verify Git Installation**: 65 | Open PowerShell and run: 66 | ```powershell 67 | git --version 68 | ``` 69 | If installed correctly, you’ll see output like `git version 2.50.1`. If you get an error (e.g., `git : The term 'git' is not recognized`), ensure Git was added to your system PATH. You can fix this by reinstalling Git and selecting the “Add Git to PATH” option, or manually adding the Git executable path (e.g., `C:\Program Files\Git\bin`) to your system’s environment variables: 70 | - Press `Win + R`, type `sysdm.cpl`, and go to **Advanced > Environment Variables**. 71 | - Under **System Variables**, find `Path`, edit it, and add the Git bin directory (e.g., `C:\Program Files\Git\bin`). 72 | 73 | 2. **Clone the Repository**: 74 | In PowerShell, navigate to a directory where you want to store the project (e.g., `C:\Projects`): 75 | ```powershell 76 | git clone https://github.com/gerivanc/entropy-password-generator.git 77 | cd entropy-password-generator 78 | ``` 79 | 80 | 3. **Run Without Installation**: 81 | No additional dependencies are required since the project uses only Python standard libraries. You can run the generator directly: 82 | ```powershell 83 | python entropy_password_generator\password_generator.py --help 84 | ``` 85 | 86 | --- 87 | 88 | ## 🔑 Generating Passwords 89 | 90 | Once installed, you can generate passwords using the CLI. Below are examples of common use cases, leveraging the predefined modes or custom configurations. 91 | 92 | ### Using Predefined Modes 93 | 94 | The **EntroPy Password Generator** offers 20+ predefined modes for secure password generation. Here’s how to use them in PowerShell: 95 | 96 | - **Generate a Password with Mode 15 (24 characters, high entropy)**: 97 | ```powershell 98 | entropy-password-generator --mode 15 99 | ``` 100 | **Example Output**: 101 | ``` 102 | Generated password: 9gj-%Jb,zw8s3Gxsg(k#%.Q7 103 | Entropy: 152.16 bits 104 | ``` 105 | 106 | - **Generate a Password with Mode 20 (128 characters, ultra-secure)**: 107 | ```powershell 108 | entropy-password-generator --mode 20 109 | ``` 110 | **Example Output**: 111 | ``` 112 | Generated password: Zt(^Xw&,\%(j~3szY$nmPkyWqe?d$Un2A!E@.rAwEA]ef$4&fK5B{zm7?pe#GE;#;pv\A[,JSZF~2xYN\k((2!#mVN6rQK.G$%cjT 113 | Entropy: 811.50 bits 114 | ``` 115 | 116 | > **Note**: If you cloned the repository and are not using the PyPI installation, replace `entropy-password-generator` with: 117 | > ```powershell 118 | > python entropy_password_generator\password_generator.py --mode 119 | > ``` 120 | 121 | ### Using Custom Configurations 122 | 123 | For tailored passwords, use the `--length` option with additional flags to customize the character set. 124 | 125 | - **Generate a 15-Character Wi-Fi Password (with ambiguous characters)**: 126 | ```powershell 127 | entropy-password-generator --length 15 --with-ambiguous 128 | ``` 129 | **Example Output**: 130 | ``` 131 | Generated password: D(LcKs|exNf_zf3 132 | Entropy: 97.62 bits 133 | ``` 134 | 135 | - **Generate a 32-Character Cloud Storage Password (no ambiguous characters)**: 136 | ```powershell 137 | entropy-password-generator --length 32 138 | ``` 139 | **Example Output**: 140 | ``` 141 | Generated password: z;#JTR^S **Warning:** Password entropy ({entropy:.2f} bits) is below the recommended 75 bits (Proton© standard). 155 | > To improve security, increase the password length (e.g., use `--length 24` or higher) and include more character types (e.g., use uppercase, lowercase, digits, and special characters). 156 | . 157 | 158 | - **Generate a 128-Character Cryptographic Key (with ambiguous characters)**: 159 | ```powershell 160 | entropy-password-generator --length 128 --with-ambiguous 161 | ``` 162 | **Example Output**: 163 | ``` 164 | Generated password: CwjKwYd1#^1W)_odEjmKFrY=K+9c5$Q0UaKH5MH;I4fFj:YJMlXkQkhkiL]T+M.1*[O&s~Lfw\^UPBVf=(t7Bi3QWZL~lO-7p\g;=Dq91|SP3!@Onj$E3d]!MZ,7Tz)^ 165 | Entropy: 833.00 bits 166 | ``` 167 | 168 | --- 169 | 170 | ## 🖥️ PowerShell Tips for Smooth Usage 171 | 172 | - **Check Python Version**: 173 | ```powershell 174 | python --version 175 | ``` 176 | Ensure it’s 3.8 or higher. 177 | 178 | - **Update pip**: 179 | To avoid compatibility issues: 180 | ```powershell 181 | python -m pip install --upgrade pip 182 | ``` 183 | 184 | - **Run Commands from Repository**: 185 | If you cloned the repository, navigate to the project folder and use: 186 | ```powershell 187 | python entropy_password_generator\password_generator.py --mode 188 | ``` 189 | 190 | - **View CLI Help**: 191 | For a full list of options: 192 | ```powershell 193 | entropy-password-generator --help 194 | ``` 195 | 196 | --- 197 | 198 | ## ⚠️ Troubleshooting 199 | 200 | - **Command Not Found**: 201 | - Ensure you’ve installed the package globally or are using the correct command for the repository (`python entropy_password_generator\password_generator.py`). 202 | - If using the repository, verify you’re in the correct directory. 203 | 204 | - **pip Install Fails**: 205 | - Update pip: `python -m pip install --upgrade pip`. 206 | - Ensure an active internet connection. 207 | - Check for permission issues; try running PowerShell as Administrator: 208 | ```powershell 209 | Start-Process powershell -Verb RunAs 210 | ``` 211 | 212 | - **Git Not Recognized**: 213 | - If `git --version` fails, ensure Git is installed and added to your system PATH. Reinstall Git, selecting “Add Git to PATH,” or manually add the Git bin directory (e.g., `C:\Program Files\Git\bin`) to your environment variables. 214 | 215 | - **Python Not Recognized**: 216 | - Verify Python is installed and added to your system PATH. Reinstall Python and check the “Add Python to PATH” option during installation. 217 | 218 | - **Low Entropy Warning**: 219 | - If a password’s entropy is below 75 bits, increase the length (e.g., `--length 24`) or include more character types (e.g., remove `--no-uppercase` or `--no-special`). 220 | 221 | For additional help, visit the [Issues tab](https://github.com/gerivanc/entropy-password-generator/issues) on GitHub. 222 | 223 | --- 224 | 225 | ## 🔒 Security Best Practices 226 | 227 | - **Use a Password Manager**: Store generated passwords in a secure password manager like [Bitwarden](https://bitwarden.com/). 228 | - **Enable 2FA**: Add two-factor authentication for critical accounts. 229 | - **Avoid Reusing Passwords**: Generate unique passwords for each service. 230 | - **Regular Updates**: Update your master passwords periodically using high-entropy modes (e.g., Mode 19 or 20). 231 | 232 | --- 233 | 234 | ## 🌟 Next Steps 235 | 236 | Explore the full range of password modes and configurations in the [README.md](https://github.com/gerivanc/entropy-password-generator/blob/main/README.md). For detailed entropy calculations, check [PASSWORDENTROPYCALCULATION.md](https://github.com/gerivanc/entropy-password-generator/blob/main/PASSWORDENTROPYCALCULATION.md). 237 | 238 | Want to contribute? See our [Contributing Guidelines](https://github.com/gerivanc/entropy-password-generator/blob/main/CONTRIBUTING.md) to join the project! 239 | 240 | --- 241 | 242 | ## 📬 Contact 243 | 244 | For questions or feedback, reach out at: [dean-grumbly-plop@duck.com](mailto:dean-grumbly-plop@duck.com). 245 | 246 | --- 247 | 248 | #### Copyright © 2025 Gerivan Costa dos Santos 249 | -------------------------------------------------------------------------------- /entropy_password_generator/password_generator.py: -------------------------------------------------------------------------------- 1 | """ 2 | EntroPy Password Generator - A secure and customizable password generator 3 | written in Python. 4 | 5 | This script provides a command-line interface for generating strong, random 6 | passwords with customizable character sets and calculates their entropy to 7 | assess strength. It includes 20 predefined modes for password generation, 8 | ensuring high security standards. 9 | 10 | ========================= 11 | Features: 12 | - Generates passwords with lengths between 15 and 128 characters. 13 | - Supports uppercase letters, lowercase letters, digits, and special 14 | characters. 15 | - Option to exclude ambiguous characters for better readability. 16 | - Calculates password entropy to assess strength. 17 | - Command-line interface for flexible usage. 18 | ---------------------------------------- 19 | 20 | Copyright © 2025 Gerivan Costa dos Santos 21 | EntroPy Password Generator 22 | Author: gerivanc 23 | GitHub: https://github.com/gerivanc 24 | MIT License: 25 | https://github.com/gerivanc/entropy-password-generator/blob/main/LICENSE.md 26 | Changelog: 27 | https://github.com/gerivanc/entropy-password-generator/blob/main/CHANGELOG.md 28 | Issue Report: 29 | https://github.com/gerivanc/entropy-password-generator/blob/main/.github/ISSUE_TEMPLATE/issue_template.md 30 | Version: 0.6.4 31 | """ 32 | 33 | import secrets 34 | import string 35 | import math 36 | import argparse 37 | 38 | # Character sets 39 | SPECIAL_CHARS = '!@#$%^&*()_+-=[]{}|;:,.<>?~`\\' 40 | UPPERCASE_LETTERS = string.ascii_uppercase # A-Z 41 | LOWERCASE_LETTERS = string.ascii_lowercase # a-z 42 | DIGITS = string.digits # 0-9 43 | 44 | # Ambiguous characters 45 | AMBIG_UPPERCASE = 'ILO' # I, L, O 46 | AMBIG_LOWERCASE = 'ilo' # i, l, o 47 | AMBIG_DIGITS = '01' # 0, 1 48 | AMBIG_SPECIAL = '|`' # Vertical bar and backtick 49 | 50 | # Define configurations for all 20 modes 51 | MODES = { 52 | # Block I: All with ambiguous characters, length 24 53 | 1: {"length": 24, "use_uppercase": False, "use_lowercase": True, 54 | "use_digits": False, "use_special": True, "avoid_ambiguous": False}, 55 | 2: {"length": 24, "use_uppercase": True, "use_lowercase": False, 56 | "use_digits": False, "use_special": True, "avoid_ambiguous": False}, 57 | 3: {"length": 24, "use_uppercase": True, "use_lowercase": True, 58 | "use_digits": False, "use_special": False, "avoid_ambiguous": False}, 59 | 4: {"length": 24, "use_uppercase": True, "use_lowercase": False, 60 | "use_digits": True, "use_special": False, "avoid_ambiguous": False}, 61 | 5: {"length": 24, "use_uppercase": False, "use_lowercase": True, 62 | "use_digits": True, "use_special": False, "avoid_ambiguous": False}, 63 | 6: {"length": 24, "use_uppercase": False, "use_lowercase": False, 64 | "use_digits": True, "use_special": True, "avoid_ambiguous": False}, 65 | 7: {"length": 24, "use_uppercase": True, "use_lowercase": True, 66 | "use_digits": True, "use_special": False, "avoid_ambiguous": False}, 67 | 8: {"length": 24, "use_uppercase": True, "use_lowercase": True, 68 | "use_digits": False, "use_special": True, "avoid_ambiguous": False}, 69 | 9: {"length": 24, "use_uppercase": True, "use_lowercase": False, 70 | "use_digits": True, "use_special": True, "avoid_ambiguous": False}, 71 | 10: {"length": 24, "use_uppercase": False, "use_lowercase": True, 72 | "use_digits": True, "use_special": True, "avoid_ambiguous": False}, 73 | # Block II: Mixed configurations 74 | 11: {"length": 15, "use_uppercase": True, "use_lowercase": True, 75 | "use_digits": True, "use_special": True, "avoid_ambiguous": True}, 76 | 12: {"length": 18, "use_uppercase": True, "use_lowercase": True, 77 | "use_digits": True, "use_special": True, "avoid_ambiguous": False}, 78 | 13: {"length": 20, "use_uppercase": False, "use_lowercase": True, 79 | "use_digits": True, "use_special": False, "avoid_ambiguous": True}, 80 | 14: {"length": 20, "use_uppercase": True, "use_lowercase": False, 81 | "use_digits": True, "use_special": False, "avoid_ambiguous": True}, 82 | 15: {"length": 24, "use_uppercase": True, "use_lowercase": True, 83 | "use_digits": True, "use_special": True, "avoid_ambiguous": True}, 84 | 16: {"length": 32, "use_uppercase": True, "use_lowercase": True, 85 | "use_digits": True, "use_special": True, "avoid_ambiguous": True}, 86 | 17: {"length": 42, "use_uppercase": True, "use_lowercase": True, 87 | "use_digits": True, "use_special": True, "avoid_ambiguous": True}, 88 | 18: {"length": 60, "use_uppercase": True, "use_lowercase": True, 89 | "use_digits": True, "use_special": True, "avoid_ambiguous": True}, 90 | 19: {"length": 75, "use_uppercase": True, "use_lowercase": True, 91 | "use_digits": True, "use_special": True, "avoid_ambiguous": True}, 92 | 20: {"length": 128, "use_uppercase": True, "use_lowercase": True, 93 | "use_digits": True, "use_special": True, "avoid_ambiguous": True}, 94 | } 95 | 96 | 97 | def print_header(): 98 | """ 99 | Prints the header with project information at the start of the script 100 | execution. 101 | """ 102 | header = ( 103 | "Copyright © 2025 Gerivan Costa dos Santos\n" 104 | "EntroPy Password Generator\n" 105 | "Author: gerivanc\n" 106 | "GitHub: https://github.com/gerivanc\n" 107 | "MIT License: https://github.com/gerivanc/entropy-password-" 108 | "generator/blob/main/LICENSE.md\n" 109 | "Changelog: https://github.com/gerivanc/entropy-password-" 110 | "generator/blob/main/CHANGELOG.md\n" 111 | "Issue Report: https://github.com/gerivanc/entropy-password-" 112 | "generator/blob/main/.github/ISSUE_TEMPLATE/issue_template.md\n" 113 | "Version: 0.6.4\n" 114 | "----------------------------------------\n" 115 | ) 116 | print(header) 117 | 118 | 119 | def generate_password( 120 | length=72, 121 | use_uppercase=True, 122 | use_lowercase=True, 123 | use_digits=True, 124 | use_special=True, 125 | avoid_ambiguous=True 126 | ): 127 | """ 128 | Generates a secure random password with customizable settings and 129 | calculates its entropy. 130 | 131 | Parameters: 132 | length (int): Password length (minimum 15, maximum 128) 133 | use_uppercase (bool): Include uppercase letters (A-Z) 134 | use_lowercase (bool): Include lowercase letters (a-z) 135 | use_digits (bool): Include digits (0-9) 136 | use_special (bool): Include special characters 137 | avoid_ambiguous (bool): If True, removes visually ambiguous characters 138 | 139 | Returns: 140 | tuple: (password (str), entropy (float)) - Generated password and its 141 | entropy in bits 142 | 143 | Raises: 144 | ValueError: If parameters are invalid or no characters are available 145 | """ 146 | # Validate length 147 | if not isinstance(length, int) or length < 15 or length > 128: 148 | raise ValueError("Password length must be an integer between 15 and " 149 | "128 characters.") 150 | 151 | # Ensure at least one character type is selected 152 | if not (use_uppercase or use_lowercase or use_digits or use_special): 153 | raise ValueError("At least one character type must be selected.") 154 | 155 | # Initialize character sets 156 | uppercase_local = UPPERCASE_LETTERS if use_uppercase else '' 157 | lowercase_local = LOWERCASE_LETTERS if use_lowercase else '' 158 | digits_local = DIGITS if use_digits else '' 159 | special_local = SPECIAL_CHARS if use_special else '' 160 | 161 | # Adjust to avoid ambiguous characters 162 | if avoid_ambiguous: 163 | if use_uppercase: 164 | uppercase_local = ''.join(c for c in uppercase_local 165 | if c not in AMBIG_UPPERCASE) 166 | if use_lowercase: 167 | lowercase_local = ''.join(c for c in lowercase_local 168 | if c not in AMBIG_LOWERCASE) 169 | if use_digits: 170 | digits_local = ''.join(c for c in digits_local 171 | if c not in AMBIG_DIGITS) 172 | if use_special: 173 | special_local = ''.join(c for c in special_local 174 | if c not in AMBIG_SPECIAL) 175 | 176 | # Combine available characters 177 | all_chars = uppercase_local + lowercase_local 178 | all_chars += digits_local + special_local 179 | 180 | if not all_chars: 181 | raise ValueError("No characters available to generate the password " 182 | "after configuration.") 183 | 184 | # Determine minimum required characters 185 | min_required = (1 if use_uppercase else 0) + \ 186 | (1 if use_lowercase else 0) + \ 187 | (1 if use_digits else 0) + \ 188 | (1 if use_special else 0) 189 | 190 | # Ensure length is sufficient for required characters 191 | if length < min_required: 192 | raise ValueError("Password length must be at least " 193 | f"{min_required} to include all selected " 194 | "character types.") 195 | 196 | # Ensure at least one character of each selected type 197 | password = [] 198 | if use_uppercase: 199 | password.append(secrets.choice(uppercase_local)) 200 | if use_lowercase: 201 | password.append(secrets.choice(lowercase_local)) 202 | if use_digits: 203 | password.append(secrets.choice(digits_local)) 204 | if use_special: 205 | password.append(secrets.choice(special_local)) 206 | 207 | # Fill the remaining length 208 | for _ in range(length - len(password)): 209 | password.append(secrets.choice(all_chars)) 210 | 211 | # Shuffle the password securely 212 | for i in range(len(password) - 1, 0, -1): 213 | j = secrets.randbelow(i + 1) 214 | password[i], password[j] = password[j], password[i] 215 | 216 | # Calculate entropy 217 | charset_size = len(set(all_chars)) 218 | entropy = math.log2(charset_size) * length 219 | 220 | # Warn if entropy is below the Proton© recommended minimum (75 bits) 221 | if entropy < 75: 222 | suggestions = [] 223 | if length < 24: 224 | suggestions.append("increase the password length (e.g., use " 225 | "--length 24 or higher)") 226 | if sum([use_uppercase, use_lowercase, use_digits, use_special]) < 3: 227 | suggestions.append("include more character types (e.g., use " 228 | "uppercase, lowercase, digits, and special " 229 | "characters)") 230 | if suggestions: 231 | suggestion_text = " and ".join(suggestions) 232 | else: 233 | suggestion_text = "use a stronger configuration" 234 | print("----------------------------------------") 235 | print("Warning: Password entropy ({entropy:.2f} bits) is below the " 236 | "recommended 75 bits (Proton© standard).") 237 | print(f"To improve security, {suggestion_text}.") 238 | print("----------------------------------------") 239 | 240 | return ''.join(password), entropy 241 | 242 | 243 | def main(): 244 | """ 245 | Command-line interface for the EntroPy Password Generator. 246 | Allows customization of password generation via terminal arguments. 247 | """ 248 | parser = argparse.ArgumentParser( 249 | description="EntroPy Password Generator: A secure and customizable " 250 | "password generator." 251 | ) 252 | parser.add_argument( 253 | "--mode", type=int, choices=range(1, 21), 254 | help="Password generation mode (1 to 20, corresponding to predefined " 255 | "configurations)" 256 | ) 257 | parser.add_argument( 258 | "--length", type=int, default=72, 259 | help="Password length (15 to 128 characters, default: 72). Ignored " 260 | "if --mode is specified." 261 | ) 262 | parser.add_argument( 263 | "--no-uppercase", action="store_false", dest="use_uppercase", 264 | help="Exclude uppercase letters. Ignored if --mode is specified." 265 | ) 266 | parser.add_argument( 267 | "--no-lowercase", action="store_false", dest="use_lowercase", 268 | help="Exclude lowercase letters. Ignored if --mode is specified." 269 | ) 270 | parser.add_argument( 271 | "--no-digits", action="store_false", dest="use_digits", 272 | help="Exclude digits. Ignored if --mode is specified." 273 | ) 274 | parser.add_argument( 275 | "--no-special", action="store_false", dest="use_special", 276 | help="Exclude special characters. Ignored if --mode is specified." 277 | ) 278 | parser.add_argument( 279 | "--with-ambiguous", action="store_false", dest="avoid_ambiguous", 280 | help="Include ambiguous characters. Ignored if --mode is specified." 281 | ) 282 | 283 | args = parser.parse_args() 284 | 285 | print_header() 286 | 287 | try: 288 | if args.mode: 289 | # Mode-based generation 290 | if args.mode not in MODES: 291 | raise ValueError(f"Invalid mode: {args.mode}. Must be between " 292 | "1 and 20.") 293 | config = MODES[args.mode] 294 | password, entropy = generate_password( 295 | length=config["length"], 296 | use_uppercase=config["use_uppercase"], 297 | use_lowercase=config["use_lowercase"], 298 | use_digits=config["use_digits"], 299 | use_special=config["use_special"], 300 | avoid_ambiguous=config["avoid_ambiguous"] 301 | ) 302 | block = ("Block I (All with ambiguous characters, length 24)" 303 | if args.mode <= 10 else 304 | "Block II (Mixed configurations)") 305 | print(f"Mode {args.mode} Password ({block}):") 306 | print() 307 | print(f"Password: {password}") 308 | print() 309 | print(f"Length: {len(password)} characters") 310 | print(f"Entropy: {entropy:.2f} bits") 311 | else: 312 | # Custom generation 313 | password, entropy = generate_password( 314 | length=args.length, 315 | use_uppercase=args.use_uppercase, 316 | use_lowercase=args.use_lowercase, 317 | use_digits=args.use_digits, 318 | use_special=args.use_special, 319 | avoid_ambiguous=args.avoid_ambiguous 320 | ) 321 | print("Custom Password (Block III - Using Custom Configuration):") 322 | print() 323 | print(f"Password: {password}") 324 | print() 325 | print(f"Length: {len(password)} characters") 326 | print(f"Entropy: {entropy:.2f} bits") 327 | except ValueError as e: 328 | print(f"Error: {str(e)}") 329 | 330 | 331 | if __name__ == "__main__": 332 | main() 333 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![EntroPy Password Generator - A secure and customizable password generator 2 | written in Python](https://drive.google.com/uc?export=download&id=19T8p_jzaaWGx9RS0sQlW7p6vG-9Hk4K0) 3 | 4 | --- 5 | 6 | # EntroPy Password Generator - A secure and customizable password generator written in Python (v0.6.4) 7 | 8 |
9 | License: MIT 10 | Made with Python 11 | Entropy Compliant 12 | Maintained 13 | GitHub Actions Status 14 | Test PyPI Project 15 | PyPI Project 16 |
17 | 18 | **EntroPy Password Generator** is a secure and customizable password generator developed in Python, enabling users to generate strong passwords on both Linux and Windows systems. It creates robust passwords with configurable character sets and calculates their entropy to evaluate strength. The project provides 20+ modes for secure password generation, ranging from 15 to 128 characters, with entropies between 97.62 bits and 833.00 bits, exceeding the [Proton©](https://proton.me/blog/what-is-password-entropy) recommended minimum of 75 bits and the cryptographic strength best practices outlined in [NIST SP 800-63B](https://pages.nist.gov/800-63-3/sp800-63b.html) and [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf). 19 | 20 | --- 21 | 22 | ## 📚 Table of Contents 23 | - [📜 Disclaimer](#-disclaimer) 24 | - [✨ Features](#-features) 25 | - [📋 Requirements](#-requirements) 26 | - [🔒 Password Modes](#-password-modes) 27 | - [💾 Installation](#-installation) 28 | - [🛠 Command Line Interface](#-command-line-interface) 29 | - [📸 Screenshots](#-screenshots) 30 | - [⚙️ Using Predefined Modes](#️-using-predefined-modes) 31 | - [💡Suggestions for Password Types](#-suggestions-for-password-types) 32 | - [📦 Install in simulated environment](#-install-in-simulated-environment) 33 | - [🖥️ Getting Started on Windows](#️-getting-started-on-windows) 34 | - [📊 Password Entropy Calculation](#-password-entropy-calculation) 35 | - [🛠️ Development](#️-development) 36 | - [📢 Reporting Issues](#-reporting-issues) 37 | - [🐞 Reporting Bugs](#-reporting-bugs) 38 | - [🛡️ Security - Reporting a Vulnerability](#️-security---reporting-a-vulnerability) 39 | - [🤝 Contributing](#-contributing) 40 | - [📝 Release Notes](#-release-notes) 41 | - [📅 Changelog](#-changelog) 42 | - [❤️ Support This Project](#️-support-this-project) 43 | - [📧 Contact](#-contact) 44 | - [📄 License](#-license) 45 | 46 | --- 47 | 48 | # 📜 Disclaimer 49 | Do not attempt to memorize the passwords generated by this tool. Instead, use a reliable password manager, such as [Bitwarden©](https://bitwarden.com/), which I personally recommend. The only password you should memorize is the master password for your password manager's vault, created with a strong combination of uppercase and lowercase letters, numbers, and special characters. Enable two-factor authentication (2FA) whenever possible to enhance security. A great option for managing your 2FA is Ente Auth , a free, open-source, and cross-platform app that provides end-to-end encrypted backups. [Ente Auth](https://ente.io/auth/) ensures your 2FA codes are secure and synced across devices, with externally audited encryption, offering robust protection for all your accounts that support 2FA. 50 | 51 | --- 52 | 53 | # ✨ Features 54 | - Generates passwords with lengths between **15 and 128 characters**. 55 | - Supports uppercase letters (A-Z), lowercase letters (a-z), digits (0-9), and special characters (!@#$%^&*()_+-=[]{}|;:,.<>?~\\). 56 | - Option to exclude visually ambiguous characters (e.g., 'I', 'L', 'O', '0') for better readability. 57 | - Calculates password entropy (in bits) to evaluate strength. 58 | - Displays a warning if the generated password's entropy is below 75 bits (Proton© standard), with suggestions to improve security. 59 | - Command-line interface (CLI) for flexible usage. 60 | - Uses Python's `secrets` module for cryptographically secure random generation. 61 | 62 | --- 63 | 64 | # 📋 Requirements 65 | - Python 3.8 or higher. 66 | - No external dependencies (uses only standard Python libraries: `secrets`, `string`, `math`, `argparse`). 67 | 68 | --- 69 | 70 | # 🔒 Password Modes 71 | The generator offers 20+ modes for secure password generation, divided into three blocks: 72 | 73 | - **Block I (Modes 1–10):** Fixed length of 24 characters, including ambiguous characters (e.g., 'I', 'O', '0'), with varying character sets to balance readability and security. Ideal for general-purpose passwords, such as website logins or application credentials. 74 | - **Block II (Modes 11–20):** Varying lengths (15 to 128 characters), mostly excluding ambiguous characters for enhanced readability. These modes cater to sensitive applications, from personal accounts to cryptographic keys and enterprise-grade security. 75 | - **Block III (Using Custom Configuration):** Custom passwords with lengths between 15 and 128 characters, specified using the --length option followed by the desired length (15-128), including ambiguous characters. 76 | These passwords achieve entropies ranging from 97.62 to 833.00 bits, making them suitable for a wide range of applications, from personal use to high-security environments requiring robust cryptographic strength. 77 | 78 | ## Password Modes Summary 79 | The table below summarizes the 20 password generation modes, ordered by increasing entropy, highlighting their configurations, character set sizes (\( R \)), and recommended use cases: 80 | 81 | | Mode | Length | Character Set | R (Charset Size) | Entropy (bits) | Security Level | Use Case | 82 | |------|--------|---------------|------------------|----------------|----------------|----------| 83 | | 11 | 15 | Full (uppercase, lowercase, digits, symbols, no ambiguous) | 95 | 95.10 | Strong | Personal accounts (email, social media) | 84 | | 13 | 20 | Lowercase + Digits (no ambiguous) | 36 | 99.08 | Strong | Basic application logins | 85 | | 14 | 20 | Uppercase + Digits (no ambiguous) | 36 | 99.08 | Strong | Device authentication | 86 | | 12 | 18 | Full (uppercase, lowercase, digits, symbols, with ambiguous) | 95 | 117.14 | Very Strong | Professional accounts (work email, VPN) | 87 | | 4 | 24 | Uppercase + Digits (with ambiguous) | 36 | 124.08 | Very Strong | Legacy systems requiring uppercase | 88 | | 5 | 24 | Lowercase + Digits (with ambiguous) | 36 | 124.08 | Very Strong | Readable passwords for manual entry | 89 | | 6 | 24 | Digits + Special (with ambiguous) | 43 | 126.85 | Very Strong | API tokens with limited character sets | 90 | | 3 | 24 | Uppercase + Lowercase (with ambiguous) | 52 | 136.81 | Very Strong | General-purpose website logins | 91 | | 1 | 24 | Lowercase + Special (with ambiguous) | 59 | 138.75 | Very Strong | Secure notes or backup codes | 92 | | 2 | 24 | Uppercase + Special (with ambiguous) | 59 | 138.75 | Very Strong | Administrative console access | 93 | | 7 | 24 | Uppercase + Lowercase + Digits (with ambiguous) | 62 | 142.90 | Very Strong | Multi-user system credentials | 94 | | 9 | 24 | Uppercase + Digits + Special (with ambiguous) | 69 | 144.54 | Very Strong | Database access keys | 95 | | 10 | 24 | Lowercase + Digits + Special (with ambiguous) | 69 | 144.54 | Very Strong | Secure file encryption | 96 | | 8 | 24 | Uppercase + Lowercase + Special (with ambiguous) | 85 | 151.16 | Extremely Strong | High-security application logins | 97 | | 15 | 24 | Full (uppercase, lowercase, digits, symbols, no ambiguous) | 94 | 152.16 | Extremely Strong | Enterprise-grade passwords | 98 | | 16 | 32 | Full (uppercase, lowercase, digits, symbols, no ambiguous) | 94 | 202.88 | Cryptographic Grade | API keys for sensitive services | 99 | | 17 | 42 | Full (uppercase, lowercase, digits, symbols, no ambiguous) | 94 | 266.27 | Cryptographic Grade | Server authentication tokens | 100 | | 18 | 60 | Full (uppercase, lowercase, digits, symbols, no ambiguous) | 94 | 380.39 | Ultra Secure | Financial system credentials | 101 | | 19 | 75 | Full (uppercase, lowercase, digits, symbols, no ambiguous) | 94 | 475.49 | Ultra Secure | Master keys for password managers | 102 | | 20 | 128 | Full (uppercase, lowercase, digits, symbols, no ambiguous) | 94 | 811.50 | Ultra Secure (Theoretical Maximum) | Cryptographic keys, blockchain wallets | 103 | 104 | > **Note**: **Search Space Depth** defines the variety of characters in a password, influencing its resistance to brute-force attacks. Expanding it with letters, numbers, and symbols increases possible combinations, making the password harder to crack. **Entropy** reaches theoretical maximum values under uniform random selection, but requiring at least one character per type slightly reduces effective entropy in shorter passwords. This reduction is negligible, and all modes exceed Proton© and NIST standards. 105 | 106 | --- 107 | 108 | # 💾 Installation 109 | 1. Ensure you have Python 3.8 or higher installed. 110 | 2. Clone the repository: 111 | ```bash 112 | git clone https://github.com/gerivanc/entropy-password-generator.git 113 | cd entropy-password-generator 114 | ``` 115 | 3. No additional dependencies are required, as the project uses only Python standard libraries. 116 | 117 | --- 118 | 119 | # 🛠 Command Line Interface 120 | - `--mode `: Select a predefined password generation mode (1 to 20). Overrides other configuration options. 121 | - `--length `: Set password length (15 to 128, default: 72). Ignored if `--mode` is specified. 122 | - `--no-uppercase`: Exclude uppercase letters. Ignored if `--mode` is specified. 123 | - `--no-lowercase`: Exclude lowercase letters. Ignored if `--mode` is specified. 124 | - `--no-digits`: Exclude digits. Ignored if `--mode` is specified. 125 | - `--no-special`: Exclude special characters. Ignored if `--mode` is specified. 126 | - `--with-ambiguous`: Include ambiguous characters. Ignored if `--mode` is specified. 127 | 128 | --- 129 | 130 | ## 🧪 Usage 131 | Run the generator from the command line interface, specifying a custom mode or configuration. After installing from Test PyPI in the virtual environment or locally, use: 132 | 133 | Mode 1 to 20. 134 | ```bash 135 | entropy-password-generator --mode 136 | ``` 137 | 138 | else 139 | 140 | Using Custom Configuration, (15-128 characters, all types, with ambiguous) 141 | ```bash 142 | entropy-password-generator --length --with-ambiguous 143 | ``` 144 | 145 | Alternatively, run directly from the repository: 146 | 147 | Mode 1 to 20. 148 | ```bash 149 | python3 entropy_password_generator/password_generator.py --mode 150 | ``` 151 | 152 | else 153 | 154 | Using Custom Configuration, (15-128 characters, all types, with ambiguous) 155 | ```bash 156 | python3 entropy_password_generator/password_generator.py --length 157 | ``` 158 | 159 | --- 160 | 161 | ## 📸 Screenshots 162 | 163 | ### Below is an example of the CLI output for **Mode 11** `--mode 11`: 164 | 165 | ![Mode 11 Output](https://drive.google.com/uc?export=download&id=1ZlTtph8U6nlWscN4I0MaXPNiZR0IiT4V) 166 | 167 | > *Note*: Screenshot using the command: `python3 entropy_password_generator/password_generator.py --mode 11`. Demonstration image of the output result of the function. 168 | 169 | ### Below is an example of the CLI output for **--length** `--length 15 --with-ambiguous`: 170 | 171 | ![--length 15 Output](https://drive.google.com/uc?export=download&id=1PIe4WGdyGwV1g5t18F7JQFYBQctfpoxO) 172 | 173 | > *Note*: Screenshot using the command: `python3 entropy_password_generator/password_generator.py --length 15 --with-ambiguous`. Demonstration image of the output result of the function. 174 | 175 | --- 176 | 177 | # ⚙️ Using Predefined Modes 178 | 179 | The generator offers over 20+ modes for secure password generation, divided into three blocks. Below are examples of each of the 20+ predefined modes, showing their settings and entropy: 180 | 181 | ## 🧩 Block I (All with ambiguous characters, length 24) 182 | **Mode 1: Lowercase + Special characters** 183 | ```bash 184 | python3 entropy_password_generator/password_generator.py --mode 1 185 | ``` 186 | ``` 187 | Generated password: &\]*y>fhqs*e<.+fl=~ijy-i 188 | Entropy: 138.75 bits 189 | ``` 190 | 191 | **Mode 2: Uppercase + Special characters** 192 | ```bash 193 | python3 entropy_password_generator/password_generator.py --mode 2 194 | ``` 195 | ``` 196 | Generated password: JRYAHHASE[|&`M`B)!!EQ$RD 197 | Entropy: 138.75 bits 198 | ``` 199 | 200 | **Mode 3: Uppercase + Lowercase** 201 | ```bash 202 | python3 entropy_password_generator/password_generator.py --mode 3 203 | ``` 204 | ``` 205 | Generated password: CWdoNFcWbvwbEOItFvAdcLmo 206 | Entropy: 136.81 bits 207 | ``` 208 | 209 | **Mode 4: Uppercase + Digits** 210 | ```bash 211 | python3 entropy_password_generator/password_generator.py --mode 4 212 | ``` 213 | ``` 214 | Generated password: 13P994RI91LP9UY7WRINH6TQ 215 | Entropy: 124.08 bits 216 | ``` 217 | 218 | **Mode 5: Lowercase + Digits** 219 | ```bash 220 | python3 entropy_password_generator/password_generator.py --mode 5 221 | ``` 222 | ``` 223 | Generated password: opzqnqb52amopnbfyduo74dl 224 | Entropy: 124.08 bits 225 | ``` 226 | 227 | **Mode 6: Digits + Special characters** 228 | ```bash 229 | python3 entropy_password_generator/password_generator.py --mode 6 230 | ``` 231 | ``` 232 | Generated password: :\\{%27!3)[_~35%@!`\\],# 233 | Entropy: 126.85 bits 234 | ``` 235 | 236 | **Mode 7: Uppercase + Lowercase + Digits** 237 | ```bash 238 | python3 entropy_password_generator/password_generator.py --mode 7 239 | ``` 240 | ``` 241 | Generated password: YMuUq6P0U6CPtoeuuqDZ7Kku 242 | Entropy: 142.90 bits 243 | ``` 244 | 245 | **Mode 8: Uppercase + Lowercase + Special characters** 246 | ```bash 247 | python3 entropy_password_generator/password_generator.py --mode 8 248 | ``` 249 | ``` 250 | Generated password: NmP@T,W&Z<99?U%MW1}XPP5 260 | Entropy: 144.54 bits 261 | ``` 262 | 263 | **Mode 10: Lowercase + Digits + Special characters** 264 | ```bash 265 | python3 entropy_password_generator/password_generator.py --mode 10 266 | ``` 267 | ``` 268 | Generated password: =7~@]pv@%>al=@ibp?+}j0d# 269 | Entropy: 144.54 bits 270 | ``` 271 | 272 | --- 273 | 274 | ## 🌀 Block II (Mixed configurations) 275 | **Mode 11: All character types, no ambiguous characters (length 15)** 276 | ```bash 277 | python3 entropy_password_generator/password_generator.py --mode 11 278 | ``` 279 | ``` 280 | Generated password: ?*WjM\MR-.JkQr5 281 | Entropy: 95.10 bits 282 | ``` 283 | 284 | **Mode 12: All character types, with ambiguous characters (length 18)** 285 | ```bash 286 | python3 entropy_password_generator/password_generator.py --mode 12 287 | ``` 288 | ``` 289 | Generated password: \?2lcM]Kb^m]a:LD)L 290 | Entropy: 117.14 bits 291 | ``` 292 | 293 | **Mode 13: Lowercase + Digits, no ambiguous characters (length 20)** 294 | ```bash 295 | python3 entropy_password_generator/password_generator.py --mode 13 296 | ``` 297 | ``` 298 | Generated password: 9mfe5vcjv9trnf9xg58k 299 | Entropy: 99.08 bits 300 | ``` 301 | 302 | **Mode 14: Uppercase + Digits, no ambiguous characters (length 20)** 303 | ```bash 304 | python3 entropy_password_generator/password_generator.py --mode 14 305 | ``` 306 | ``` 307 | Generated password: SS54DGAYSSK3XJ4ACUTD 308 | Entropy: 99.08 bits 309 | ``` 310 | 311 | **Mode 15: All character types, no ambiguous characters (length 24)** 312 | ```bash 313 | python3 entropy_password_generator/password_generator.py --mode 15 314 | ``` 315 | ``` 316 | Generated password: #Cxn8S$G8q&PrGF*9F$}(UDd 317 | Entropy: 152.16 bits 318 | ``` 319 | 320 | **Mode 16: All character types, no ambiguous characters (length 32)** 321 | ```bash 322 | python3 entropy_password_generator/password_generator.py --mode 16 323 | ``` 324 | ``` 325 | Generated password: @MXFzQ^6-cm\G=>{>Mm,-ZCZ#%XvB{vS 326 | Entropy: 202.88 bits 327 | ``` 328 | 329 | **Mode 17: All character types, no ambiguous characters (length 42)** 330 | ```bash 331 | python3 entropy_password_generator/password_generator.py --mode 17 332 | ``` 333 | ``` 334 | Generated password: %-NeH2q7@mq<9C_uJ{jPv;qQ59Z8)D=sEpYgQ6wj}4 335 | Entropy: 266.27 bits 336 | ``` 337 | 338 | **Mode 18: All character types, no ambiguous characters (length 60)** 339 | ```bash 340 | python3 entropy_password_generator/password_generator.py --mode 18 341 | ``` 342 | ``` 343 | Generated password: P<2qmg?sj~3M2}CFQvJU>G%7[>mM<@,fGS58*&U2-2*.WS+fC(u2ret*t~we 344 | Entropy: 380.39 bits 345 | ``` 346 | 347 | **Mode 19: All character types, no ambiguous characters (length 75)** 348 | ```bash 349 | python3 entropy_password_generator/password_generator.py --mode 19 350 | ``` 351 | ``` 352 | Generated password: _GN6YxM8,4xw:;@g2*_hkW&~n4XA%:,(X=s~U;G)r@<_9NfYXVtJZar9N%ZCTM=+}h!USG>JN#K 353 | Entropy: 475.49 bits 354 | ``` 355 | 356 | **Mode 20: All character types, no ambiguous characters (length 128)** 357 | ```bash 358 | python3 entropy_password_generator/password_generator.py --mode 20 359 | ``` 360 | ``` 361 | Generated password: _N$q6xm,jE2Yt=7P{GAg?XS6~-RMn=]T}~?Qt_;k)5eW[k?UZH^6$Su*a7ARaNyj)X>^*FVtMw7;t\yNK.^_@DZpQ\\K,B}qKRZ}3&}Tp&QP^H>M]<4Fb(*Wn7%U42t% 362 | Entropy: 811.50 bits 363 | ``` 364 | 365 | --- 366 | 367 | ## 🎨 Block III (Using Custom Configuration) 368 | Combine CLI options to create passwords tailored to specific needs. Here you can set the password length between 15-128 characters. Below are examples for common scenarios, ensuring a balance between security and usability: 369 | 370 | **Wi-Fi Password (15 chars, all types, with ambiguous)** 371 | ```bash 372 | python3 entropy_password_generator/password_generator.py --length 15 --with-ambiguous 373 | ``` 374 | ``` 375 | Generated password: P#Zm+e;7Lv{iI9W 376 | Entropy: 97.62 bits 377 | ``` 378 | 379 | **Cloud Storage Services (32 chars, all types, no ambiguous)** 380 | ```bash 381 | python3 entropy_password_generator/password_generator.py --length 32 382 | ``` 383 | ``` 384 | Generated password: g%63AF(D42}SCB[FpJ2XjC79q64;SE6j 385 | Entropy: 202.88 bits 386 | ``` 387 | 388 | **Simple Readable Password (15 chars, lowercase + digits, no ambiguous)** 389 | ```bash 390 | python3 entropy_password_generator/password_generator.py --length 15 --no-uppercase --no-special 391 | ``` 392 | ``` 393 | Generated password: 49j68nquq4ng2nm 394 | Entropy: 74.31 bits (Warning: Below Proton© standard) 395 | ``` 396 | > **Note**: Warning: Password entropy (74.31 bits) is below the recommended 75 bits (Proton© standard). To improve security, increase the password length (e.g., use --length 24 or higher) and include more character types (e.g., use uppercase, lowercase, digits, and special characters). 397 | 398 | **API Token (24 chars, uppercase + digits + special, with ambiguous)** 399 | ```bash 400 | python3 entropy_password_generator/password_generator.py --length 24 --no-lowercase --with-ambiguous 401 | ``` 402 | ``` 403 | Generated password: ::VM(IR[T;C!D>6MDASD&X-Z 404 | Entropy: 144.54 bits 405 | ``` 406 | 407 | **Cryptographic Key (128 chars, all types, with ambiguous)** 408 | ```bash 409 | python3 entropy_password_generator/password_generator.py --length 128 --with-ambiguous 410 | ``` 411 | ``` 412 | Generated password: Yoj|F6j~A8SJ%izZ|)#mhi6`oR~75|.;*$9xS7GIF8R[UE1?,OQD7ak\Nf-MKJx]a6nbf3A*SQXlq{xNeWGIs&;}N.G;6ldKoEZS)nTWht68A^3vz;9JpFol[-OQ`1Y^ 413 | Entropy: 833.00 bits 414 | ``` 415 | 416 | Explore these options to create passwords tailored to your specific requirements, ensuring optimal security. 417 | 418 | --- 419 | 420 | # 💡 Suggestions for Password Types 421 | The table below suggests six of the strongest password **`modes`** for daily use, covering a range of online services: 422 | 423 | | Mode (Entropy) | Recommended Service | 424 | |----------------|---------------------| 425 | | `Mode 8 (151.16 bits)` | High-security website logins (e.g., cloud storage, VPNs) | 426 | | `Mode 9 (144.54 bits)` | Database or API access (e.g., developer tools, server management) | 427 | | `Mode 10 (144.54 bits)` | Secure file encryption (e.g., encrypted backups, sensitive documents) | 428 | | `Mode 15 (152.16 bits)` | Enterprise accounts (e.g., corporate email, project management tools) | 429 | | `Mode 19 (475.49 bits)` | Password manager master keys (e.g., Bitwarden, 1Password) | 430 | | `Mode 20 (811.50 bits)` | Cryptographic keys (e.g., blockchain wallets, SSH keys) | 431 | 432 | These modes ensure robust protection for critical accounts, balancing entropy and usability. 433 | 434 | --- 435 | 436 | # 📦 Install in simulated environment 437 | 438 | ## 🛠️ Installation Options for use in virtual environments on Test PyPI and PyPI (Stable Version) on Kali Linux. 439 | 440 | ### 📝 Overview 441 | 442 | The `entropy-password-generator` package can be installed from PyPI (Stable Version) or Test PyPI (Development Version) using a virtual environment. The automated installation scripts have been tested and confirmed to work successfully on **Parrot OS**. On **Kali Linux**, due to system-specific configurations, the automated scripts may encounter issues. For successful installation on Kali Linux, use the simplified manual installation steps provided below. 443 | 444 | ### 📦 Stable Version Installation (PyPI) 445 | 446 | To install the stable version from PyPI on Kali Linux, execute the following commands step-by-step: 447 | 448 | ```bash 449 | python3 -m venv venv-stablepypi 450 | source venv-stablepypi/bin/activate 451 | python -m ensurepip --upgrade 452 | pip install --upgrade pip 453 | pip install entropy-password-generator 454 | pip list 455 | ``` 456 | 457 | ### 🧪 Development Version Installation (Test PyPI) 458 | 459 | To install the development version from Test PyPI on Kali Linux, execute the following commands step-by-step: 460 | 461 | ```bash 462 | python3 -m venv venv-testpypi 463 | source venv-testpypi/bin/activate 464 | python -m ensurepip --upgrade 465 | pip install --upgrade pip 466 | pip install -i https://test.pypi.org/simple/ --trusted-host test.pypi.org entropy-password-generator 467 | pip list 468 | ``` 469 | 470 | ### 📋 Notes 471 | - These manual steps ensure the creation of a virtual environment, activation, and installation of the package from either PyPI or Test PyPI without errors. 472 | - For exclusive software deals and tools for developers, check out [Dealsbe - Exclusive Software Deals for Developers and Startups](https://dealsbe.com). 473 | - For further assistance or troubleshooting, please refer to the project documentation or contact the support team. 474 | 475 | --- 476 | 477 | ## 🛠️ Installation Options for use in virtual environments on Test PyPI and PyPI (Stable Version) on Parrot OS. 478 | 479 | ### 📝 Overview 480 | To avoid conflicts with the system, install it in a virtual environment, such as Kali Linux and/or Parrot. 481 | The **EntroPy Password Generator** can be installed from the Python Package Index (PyPI) for the stable release or from the Test Python Package Index (Test PyPI) to test the latest development version. Follow the instructions below based on your needs. 482 | 483 | ### 🔧 Installation from PyPI (Stable Version) 484 | To install the latest stable version of the EntroPy Password Generator (version 0.6.4) from PyPI, run the following command: 485 | 486 | ```bash 487 | #!/bin/bash 488 | 489 | # Exit immediately if any command fails 490 | set -e 491 | 492 | echo "🔧 Creating virtual environment: venv-stablepypi..." 493 | python3 -m venv venv-stablepypi 494 | 495 | echo "✅ Virtual environment created successfully." 496 | 497 | echo "⚙️ Activating virtual environment..." 498 | source venv-stablepypi/bin/activate 499 | 500 | echo "🔄 Ensuring pip is available in the environment..." 501 | python -m ensurepip --upgrade 502 | 503 | echo "⬆️ Upgrading pip to the latest version..." 504 | pip install --upgrade pip 505 | 506 | echo "📦 Installing the entropy-password-generator package from PyPI..." 507 | pip install entropy-password-generator 508 | 509 | echo "📋 Listing installed packages:" 510 | pip list 511 | 512 | echo "🚀 Installation completed successfully!" 513 | ``` 514 | 515 | This command installs the package globally or in your active Python environment. After installation, you can run the generator using the following commands: 516 | 517 | Generate a custom length password of 15 ambiguous characters: 518 | ```bash 519 | entropy-password-generator --length 15 --with-ambiguous 520 | ``` 521 | 522 | or 523 | 524 | Generate a password with default mode 20: 525 | ```bash 526 | entropy-password-generator --mode 20 527 | ``` 528 | 529 | When finished, deactivate the virtual environment.: 530 | ```bash 531 | deactivate 532 | ``` 533 | 534 | Visit the [PyPI project page](https://pypi.org/project/entropy-password-generator/) for additional details about the stable release. 535 | 536 | ### 🔧 Installation from Test PyPI (Development Version) 537 | To test the latest development version of the EntroPy Password Generator, install it from the Test Python Package Index (Test PyPI): 538 | 539 | ```bash 540 | #!/bin/bash 541 | 542 | # Exit immediately if any command fails 543 | set -e 544 | 545 | echo "🔧 Creating virtual environment: venv-testpypi..." 546 | python3 -m venv venv-testpypi 547 | 548 | echo "✅ Virtual environment created successfully." 549 | 550 | echo "⚙️ Activating virtual environment..." 551 | source venv-testpypi/bin/activate 552 | 553 | echo "🔄 Ensuring pip is available in the environment..." 554 | python -m ensurepip --upgrade 555 | 556 | echo "⬆️ Upgrading pip to the latest version..." 557 | pip install --upgrade pip 558 | 559 | echo "📦 Installing the entropy-password-generator package from Test PyPI..." 560 | pip install -i https://test.pypi.org/simple/ --trusted-host test.pypi.org entropy-password-generator 561 | 562 | echo "📋 Listing installed packages:" 563 | pip list 564 | 565 | echo "🚀 Installation completed successfully!" 566 | ``` 567 | 568 | This command installs the package globally or in your active Python environment. After installation, you can run the generator using the following commands: 569 | 570 | Generate a custom length password of 42 ambiguous characters: 571 | ```bash 572 | entropy-password-generator --length 42 --with-ambiguous 573 | ``` 574 | 575 | or 576 | 577 | Generate a password with default mode 11: 578 | ```bash 579 | entropy-password-generator --mode 11 580 | ``` 581 | 582 | When finished, deactivate the virtual environment.: 583 | ```bash 584 | deactivate 585 | ``` 586 | 587 | Visit the [Test PyPI project page](https://test.pypi.org/project/entropy-password-generator/) for additional details about the development version. 588 | 589 | > **Note:** the execution of the `--mode` and `--length` scripts, as demonstrated in the previous options such as: `entropy-password-generator --mode 11` and `entropy-password-generator --length 42 --with-ambiguous`, are specific for use in the active virtual environment. Do not use > > them after cloning the repository via CLI directly without the active virtual environment, if you use them you will receive an error message such as: `entropy-password-generator: command not found`. 590 | > 591 | > To use the `--mode` and `--length` scripts used via CLI directly after cloning the repository without activating the virtual environment, 592 | > use the scripts such as: `python3 entropy_password_generator/password_generator.py --mode 11` (mode 1 to 20) and custom mode `python3 entropy_password_generator/password_generator.py --length 42 --with-ambiguous` (using custom 15 to 128 characters). 593 | 594 | --- 595 | 596 | # 🖥️ Getting Started on Windows 597 | For Windows users, a dedicated guide is available to help you install and use the **EntroPy Password Generator** via **PowerShell**. 598 | This step-by-step tutorial covers installation, configuration, and password generation with clear examples tailored for the Windows environment, including detailed instructions for setting up Git and running the generator. 599 | Check out the [**GETTING_STARTED_WINDOWS.md**](https://github.com/gerivanc/entropy-password-generator/blob/main/GETTING_STARTED_WINDOWS.md) for comprehensive guidance. 600 | 601 | --- 602 | 603 | # 📊 Password Entropy Calculation 604 | 605 | > **Secure by Design** 606 | > With Python's `secrets` module, the EntroPy Password Generator ensures cryptographically secure randomization, delivering passwords that exceed Proton© (75 bits) and NIST (80+ bits) entropy standards. 607 | 608 | The generator calculates password entropy using the formula: \( E(R) = \log_2(R^L) \), where: 609 | - \( R \): Size of the character set. 610 | - \( L \): Password length. 611 | - \( E(R) \): Entropy in bits (higher is stronger). 612 | 613 | **All 20 modes produce passwords with entropies from 95.70 to 830.98 bits**, surpassing Proton© (75 bits) and NIST (80+ bits) standards. For example: 614 | - Mode 11 (15 chars, full no ambiguous, \( R=90 \)): \( \log_2(90) \times 15 \approx 95.70 \) bits. 615 | - Mode 20 (128 chars, full no ambiguous, \( R=90 \)): \( \log_2(90) \times 128 \approx 830.98 \) bits. 616 | 617 | **Using custom configuration, modes produce passwords with entropies from 97.62 to 833.00 bits**, surpassing Proton© (75 bits) and NIST (80+ bits) standards. For example: 618 | - Using `--length 15 --with-ambiguous` (15 chars, all types, with ambiguous, ( R=90 )): ( \log_2(90) \times 15 \approx 97.62 ) bits. 619 | - Using `--length 128 --with-ambiguous` (128 chars, all types, with ambiguous, ( R=90 )): ( \log_2(90) \times 128 \approx 833.00 ) bits. 620 | 621 | > **Note**: Entropy values assume ideal randomness, achieved via the `secrets` module. The requirement of at least one character per selected type slightly reduces effective entropy for shorter passwords, but all modes remain compliant with security standards. 622 | 623 | For a detailed analysis, including entropy for each mode and comparisons with mobile authentication methods, see [Password Entropy Calculation](https://github.com/gerivanc/entropy-password-generator/blob/main/PASSWORDENTROPYCALCULATION.md). 624 | 625 | --- 626 | 627 | # 🛠️ Development 628 | 629 | To contribute to the **EntroPy Password Generator**, follow the guidelines in [CONTRIBUTING.md](https://github.com/gerivanc/entropy-password-generator/blob/main/CONTRIBUTING.md). Set up a development environment with: 630 | ```bash 631 | python3 -m venv .venv 632 | source .venv/bin/activate 633 | pip install flake8 black isort pytest 634 | ``` 635 | 636 | --- 637 | 638 | # 📢 Reporting Issues 639 | 640 | Help us improve EntroPy Password Generator by reporting bugs or suggesting enhancements to project. 641 | To report a bug, suggest a feature, or ask a question: 642 | 1. Go to the [Issues tab](https://github.com/gerivanc/entropy-password-generator/issues). 643 | 644 | 2. Click **New issue**. 645 | 646 | 3. View the available options and select to: **Report Bug** and/or [**Report Issue**](https://github.com/gerivanc/entropy-password-generator/blob/main/.github/ISSUE_TEMPLATE/issue_template.md). For security vulnerabilities, please follow our [Security Policy](https://github.com/gerivanc/entropy-password-generator/blob/main/SECURITY.md). 647 | 648 | --- 649 | 650 | # 🐞 Reporting Bugs 651 | 652 | If you encounter a bug in the **EntroPy Password Generator**, please report it using our dedicated [Bug Report template](https://github.com/gerivanc/entropy-password-generator/blob/main/.github/ISSUE_TEMPLATE/bug_report.md). This template ensures that your report includes essential details, such as steps to reproduce, environment information, and logs, enabling us to address issues efficiently. For other types of contributions or inquiries, refer to our [CONTRIBUTING.md](https://github.com/gerivanc/entropy-password-generator/blob/main/CONTRIBUTING.md). 653 | 654 | --- 655 | 656 | # 🛡️ Security - Reporting a Vulnerability 657 | If you discover a security vulnerability in EntroPy Password Generator, please report it immediately to ensure the safety of all users. See the [Security](https://github.com/gerivanc/entropy-password-generator/blob/main/SECURITY.md) for more details. 658 | 659 | --- 660 | 661 | # 🤝 Contributing 662 | Want to contribute? Check out our [Contributing Guidelines](https://github.com/gerivanc/entropy-password-generator/blob/main/CONTRIBUTING.md) to get started! 663 | 664 | --- 665 | 666 | # 📝 Release Notes 667 | See the [RELEASE.md](https://github.com/gerivanc/entropy-password-generator/blob/main/RELEASE.md) for detailed release notes for each version. 668 | 669 | --- 670 | 671 | # 📅 Changelog 672 | See the [Changelog](https://github.com/gerivanc/entropy-password-generator/blob/main/CHANGELOG.md) for a detailed history of changes to this project. 673 | 674 | --- 675 | 676 | # ❤️ Support This Project 677 | If you find EntroPy Password Generator useful, consider supporting its development with a donation: 678 | 679 | [Donate with PayPal](https://www.paypal.com/ncp/payment/FYUGSCLQRSQDN) 680 | 681 | --- 682 | 683 | # 📧 Contact 684 | For questions or feedback, please contact: dean-grumbly-plop@duck.com. 685 | 686 | --- 687 | 688 | # 📄 License 689 | This project is licensed under the MIT License. See the [License](https://github.com/gerivanc/entropy-password-generator/blob/main/LICENSE.md) for details. 690 | 691 | --- 692 | 693 | #### Copyright © 2025 Gerivan Costa dos Santos 694 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | [![Keep a Changelog](https://img.shields.io/badge/Keep%20a%20Changelog-1.0.0-orange)](https://keepachangelog.com/en/1.0.0/) 4 | [![Semantic Versioning](https://img.shields.io/badge/Semantic%20Versioning-2.0.0-blue)](https://semver.org/spec/v2.0.0.html) 5 | 6 | All notable changes to the EntroPy Password Generator project are documented in this file. This project adheres to the [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) standard, which ensures a structured and human-readable format for tracking changes. By following this approach, we provide clear visibility into the project's evolution, making it easier for users and contributors to understand what has been added, changed, or fixed in each release. Additionally, the project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html) (SemVer), which uses a versioning scheme of MAJOR.MINOR.PATCH. This practice enhances predictability and compatibility by clearly indicating the impact of updates: major versions for breaking changes, minor versions for new features, and patch versions for bug fixes. Together, these standards improve the project's maintainability, transparency, and usability for developers and security enthusiasts. 7 | 8 | --- 9 | 10 | ## [0.6.4] - 2025-08-07 11 | 12 | ### Added 13 | - Specific installation instructions for Kali Linux in `README.md` and `RELEASE.md`, including simplified manual steps for virtual environments on PyPI and Test PyPI. 14 | - Recommendation for two-factor authentication (2FA) and use of Ente Auth in the `Disclaimer` section of `README.md`. 15 | - Added emojis to the main section titles in `PASSWORDENTROPYCALCULATION.md` for improved visual appeal and readability. 16 | 17 | ### Fixed 18 | - Fixed anchor links in the Table of Contents of `README.md` that were not working due to conflicts with emojis or formatting. 19 | 20 | ### Changed 21 | - Updated project version from `0.6.3` to `0.6.4` in the `README.md` title and throughout relevant files. 22 | - Removed the "👥 Visitors" section and visitor counter from `README.md`. 23 | - Reorganized the installation section in `README.md` and `RELEASE.md` to include clear subsections for Kali Linux and Parrot OS. 24 | - Updated example commands in the installation scripts of `RELEASE.md` (from `--mode 17`, `--length 75` to `--mode 20`, `--length 15 --with-ambiguous` for PyPI, and from `--mode 20`, `--length 128 --with-ambiguous` to `--mode 11`, `--length 42 --with-ambiguous` for Test PyPI). 25 | - Adjusted layout styling and emoji usage in `README.md` for improved readability and visual identity. 26 | 27 | ## [0.6.3] - 2025-07-03 28 | 29 | ### Changed 30 | - Updated project version from `0.6.2` to `0.6.3` in the `README.md` title and throughout relevant files. 31 | - Revised all section headings in `README.md` to improve anchor compatibility across Markdown renderers. 32 | - Improved visual structure and consistency of the Table of Contents with uniform section naming. 33 | - Adjusted layout styling and emoji use for better readability and visual identity. 34 | 35 | ### Fixed 36 | - Corrected anchor links in the Table of Contents that were not functioning due to emoji or formatting conflicts. 37 | - Ensured all internal section links in `README.md` point accurately to their respective headings. 38 | - Addressed Markdown inconsistencies that caused some titles to be unrecognized as clickable headings. 39 | 40 | ## [0.6.2] - 2025-06-26 41 | 42 | ### Added 43 | - 🔧 Installation from PyPI (Stable Version): created a clean and reliable setup script using `venv`, `ensurepip`, and `pip` to install stable packages from the official PyPI index. 44 | - 🔧 Installation from Test PyPI (Development Version): added an alternate install script targeting the Test PyPI index, useful for testing packages before official release. 45 | 46 | ### Fixed 47 | - ✅ Improved installation flow by reordering commands to ensure `pip` is available before attempting package installation. 48 | - ✅ Added user guidance message to clarify how to activate the virtual environment post-installation when run in a non-interactive shell. 49 | 50 | 51 | ## [0.6.1] - 2025-06-09 52 | 53 | ### Added 54 | - Improvements to the README.md and RELEASE.md file sections, for the sections: 55 | 🔧Installation from PyPI (Stable Version) and 🔧Installation from Test PyPI (Development Version) 56 | - Improvements to the code of the 'password_generator.py' project to explain the output of passwords, indicating which Block the function passed to generate passwords belongs to in Blocks I, II and III. 57 | 58 | - Implemented block indication in the password generation output within the `main()` function: 59 | - For modes 1 to 10, displays "Block I (All with ambiguous characters, length 24)". 60 | - For modes 11 to 20, displays "Block II (Mixed configurations)". 61 | - For custom configurations using `--length`, displays "Block III (Using Custom Configuration)". 62 | - Added a new variable `block` in the `main()` function to determine the appropriate block based on the mode. 63 | - Maintained the display of password length (`Length: {len(password)} characters`) in the output for consistency with provided examples. 64 | 65 | ### Fixed 66 | 67 | - Fixed the `pip install --upgrade pip` command for installation in the corresponding README.md and RELEASE.md file sections for PyPI (Stable Version) and Test PyPI (Development Version). 68 | 69 | ## [0.6.0] - 2025-06-03 70 | 71 | ### Changed 72 | - Updated project version from 0.5.9 to 0.6.0 in the README.md title. 73 | - Updates to all layout structures and section titles. 74 | - Changes to the version indication in all files that require versioning changes. 75 | 76 | ### Fixed 77 | - Corrected the emojis used in the main section titles of the README.md file to ensure consistent and meaningful representation, enhancing visual clarity and alignment with section content. 78 | 79 | ## [0.5.9] - 2025-05-30 80 | 81 | ### Changed 82 | - Updated project version from 0.5.8 to 0.5.9 in the README.md title. 83 | - Revised the **Installation** section to include updated example commands for PyPI and Test PyPI installations: 84 | - PyPI examples changed to demonstrate `--length 15 --with-ambiguous` and `--mode 20`. 85 | - Test PyPI examples changed to demonstrate `--length 42 --with-ambiguous` and `--mode 11`. 86 | - Reorganized the **Usage** section for improved clarity, explicitly highlighting the `--with-ambiguous` option for custom configurations. 87 | - Updated **Block III (Custom Configuration)** examples: 88 | - Wi-Fi Password example now explicitly includes `--with-ambiguous` for consistency. 89 | - Updated generated password examples for Wi-Fi Password and Cloud Storage Services, maintaining consistent entropy values. 90 | - Updated **Screenshots** section to showcase: 91 | - CLI output for `--mode 11` instead of `--mode 15`. 92 | - CLI output for `--length 15 --with-ambiguous` instead of `--length 85 --with-ambiguous`. 93 | 94 | ### Fixed 95 | - No functional bugs were fixed in this release, as changes were limited to documentation improvements. 96 | 97 | ### Added 98 | - No new features were added in this release. 99 | 100 | ### Deprecated 101 | - No features were deprecated in this release. 102 | 103 | ### Removed 104 | - No features or content were removed in this release. 105 | 106 | ### Security 107 | - No security vulnerabilities were addressed in this release. 108 | 109 | ## [0.5.8] - 2025-05-27 110 | ### Added 111 | - Added detailed installation instructions in README.md for both stable and development versions of the **EntroPy Password Generator**: 112 | - **PyPI (Stable Version)**: Instructions for installing version 0.5.8 from PyPI in a virtual environment, including commands to create and activate a virtual environment, install the package, and run the generator with examples (`entropy-password-generator --mode 11` and `entropy-password-generator --length 15`). 113 | - **Test PyPI (Development Version)**: Instructions for installing the latest development version from Test PyPI in a virtual environment, including commands to create and activate a virtual environment, install the package with a trusted host, and run the generator with examples (`entropy-password-generator --mode 20` and `entropy-password-generator --length 128 --with-ambiguous`). 114 | - Included links to the [PyPI project page](https://pypi.org/project/entropy-password-generator/) and [Test PyPI project page](https://test.pypi.org/project/entropy-password-generator/) for additional details. 115 | - Provided guidance on deactivating virtual environments using the `deactivate` command. 116 | - Recommended using virtual environments (e.g., on Kali Linux or Parrot) to avoid system conflicts during installation. 117 | 118 | ### Updated 119 | - Enhanced README.md with a new section, "Installation Options for use in virtual environments on Test PyPI and PyPI (Stable Version)," to provide clear, step-by-step guidance for users installing the package in virtual environments. 120 | 121 | ## [0.5.7] - 2025-05-27 122 | ### Added 123 | - Created `GETTING_STARTED_WINDOWS.md`, a comprehensive guide tailored for Windows users. This file provides step-by-step instructions for cloning the **EntroPy Password Generator** repository and generating passwords using the Windows PowerShell command-line interface (CLI). The guide emphasizes accessibility for novice users, including detailed steps for installing Git and running the generator without a virtual environment, enhancing usability for Windows-based environments. 124 | 125 | ### Updated 126 | - Added a clarification note in README.md regarding the use of script modes in the virtual environment. The execution of the `--mode` and `--length` scripts is specific to an active virtual environment and does not apply when cloning the repository via CLI directly. Users attempting to run these scripts without activating the virtual environment will encounter an error (`entropy-password-generator: command not found`). For direct CLI usage post-cloning, alternative commands using `python3 entropy_password_generator/password_generator.py` should be followed, ensuring proper execution without dependency on a virtual environment. 127 | 128 | ### Fixed 129 | - Clarified in README.md that the `--mode` and `--length` scripts (e.g., `entropy-password-generator --mode 20` and `entropy-password-generator --length 15`) are specific to an active virtual environment. Added instructions for direct CLI usage after cloning the repository without a virtual environment, using commands like `python3 entropy_password_generator/password_generator.py --mode 15` (modes 1 to 20) and `python3 entropy_password_generator/password_generator.py --length 70` (custom length 15 to 128 characters), to prevent errors such as `entropy-password-generator: command not found`. 130 | 131 | ## [0.5.5] - 2025-05-17 132 | 133 | ### Fixed 134 | - Resolved `ModuleNotFoundError: No module named 'entropy_password_generator'` by adding explicit package inclusion in `pyproject.toml` (`[tool.hatch.build.targets.wheel]`), ensuring the `entropy_password_generator` module is included in the wheel for TestPyPI and PyPI installations. 135 | 136 | ### Changed 137 | - Updated version references from `0.5.3` to `0.5.5` in `pyproject.toml`, `__init__.py`, and documentation files. 138 | - Enhanced `RELEASE.md` with detailed installation instructions for cloning the repository, setting up virtual environments, and testing with PyPI (Stable Version) and TestPyPI (Development Version). 139 | 140 | ## [0.5.3] - 2025-05-13 141 | 142 | ## [0.5.2] - 2025-05-12 143 | 144 | ## [0.5.1] - 2025-05-11 145 | 146 | ### Changed 147 | - Updated the `main()` function in `password_generator.py` to add blank lines (`print()`) before and after the `Password` field in the output, creating visual spacing between `Custom Password` (or `Mode X Password`), `Password`, and `Length` fields for all modes (1 to 20 via `--mode`) and custom configurations (15 to 128 characters via `--length`), enhancing readability and highlighting the generated password. 148 | - Updated the "Screenshots" section in `README.md` to include new images hosted on Google Drive, reflecting the updated password output layout with added spacing for Mode 15 (`python3 entropy_password_generator/password_generator.py --mode 15`) and a custom configuration with `--length 85` (`python3 entropy_password_generator/password_generator.py --length 85`). 149 | 150 | ## [0.5.0] - 2025-05-10 151 | 152 | ### Added 153 | - Added a new section in `README.md` titled "Installation Options," detailing installation of the stable version (0.4.9) via PyPI (`pip install entropy-password-generator==0.4.9`) and the development version via Test PyPI (`pip install -i https://test.pypi.org/simple/ entropy-password-generator`), including links to the PyPI and Test PyPI project pages. 154 | - Added two new badges in `README.md`: one for the PyPI project (`https://pypi.org/project/entropy-password-generator/0.4.9/`) and one for Test PyPI (`https://test.pypi.org/project/entropy-password-generator/`), highlighting package availability. 155 | - Added a note in `README.md` on avoiding the `RuntimeWarning` when running the script, recommending the direct path (`python3 entropy_password_generator/password_generator.py`) or package installation. 156 | - Added a new section in `README.md` titled "Screenshots," including Google Drive links to images showing CLI outputs for Mode 15 (`python3 entropy_password_generator/password_generator.py --mode 15`) and a custom configuration with `--length 85` (`python3 entropy_password_generator/password_generator.py --length 85`). 157 | - Added Block III (Custom Configuration) in `README.md` under the "Password Modes" section, introducing custom modes with lengths from 15 to 128 characters, including ambiguous characters by default, with entropies ranging from 97.62 to 833.00 bits. 158 | - Added five custom configuration examples in `README.md` under Block III, covering scenarios such as Wi-Fi password (15 characters), cloud storage services (32 characters), simple readable password (15 characters), API token (24 characters), and cryptographic key (128 characters). 159 | - Added a table in `README.md` titled "Suggestions for Password Types," recommending six modes (8, 9, 10, 15, 19, 20) for specific services, such as high-security website logins, password manager master keys, and cryptographic keys. 160 | - Added a new section in `README.md` titled "Support This Project" with a PayPal donation button (`https://www.paypal.com/ncp/payment/FYUGSCLQRSQDN`), encouraging support for project development. 161 | - Added a "Character Set Size (R)" column to the password modes summary table in `README.md`, indicating the size of the character set (e.g., 90 for full set, 36 for uppercase + digits). 162 | - Added a "Use Case" column to the password modes summary table in `README.md`, suggesting practical applications for each mode (e.g., personal accounts, API tokens, cryptographic keys). 163 | - Added `bug_report.md` in `.github/ISSUE_TEMPLATE/` to provide a standardized template for bug reports, improving the contributor experience by ensuring detailed and structured issue submissions. 164 | 165 | ### Fixed 166 | - Fixed linting errors in `password_generator.py` identified by Flake8: 167 | - Corrected E302 by adding two blank lines before the `generate_password()` function. 168 | - Resolved E501 by breaking long lines (e.g., `all_chars = uppercase_local + lowercase_local + digits_local + special_local`) into multiple lines to respect the 79-character limit. 169 | - Addressed E999 by fixing inconsistent indentation (tabs vs. spaces) in the `generate_password()` function. 170 | - Fixed output formatting in the `main()` function of `password_generator.py` by replacing literal strings with f-strings, ensuring generated passwords and entropy values are displayed correctly instead of placeholders (e.g., `{password}`, `{entropy:.2f}`). 171 | - Corrected entropy values in the password modes summary table and examples in `README.md` for consistency (e.g., Mode 1 adjusted from 139.92 to 138.75 bits; Mode 20 adjusted from 816.64 to 811.50 bits). 172 | - Added a note to the password modes summary table in `README.md`, clarifying that entropy values are theoretical maximums and that requiring at least one character per selected type slightly reduces effective entropy, but all modes remain compliant with Proton and NIST standards. 173 | - Fixed E501 linting error in `entropy_password_generator/__init__.py` by removing invisible whitespace before the docstring, confirmed via `hexdump`, and ensuring lines respect the 79-character limit. 174 | - Fixed E999 IndentationError in `entropy_password_generator/__init__.py` by correcting unexpected indent (3 spaces) on the `__all__` declaration, using manual editing and `black` reformatting. 175 | - Fixed ModuleNotFoundError during local imports by ensuring proper package installation with `pip install .`, enabling successful imports of `entropy_password_generator`. 176 | 177 | ### Changed 178 | - Updated the project description in `README.md` to mention "20+ modes" (previously 20 modes) and an entropy range of 97.62 to 833.00 bits (previously 95.70 to 816.64 bits), reflecting the addition of custom modes with ambiguous characters. 179 | - Updated the "Password Entropy Calculation" section in `README.md` to include entropy examples for custom modes (e.g., `--length 15 --with-ambiguous`: 97.62 bits; `--length 128 --with-ambiguous`: 833.00 bits) and remove mention of zxcvbn, simplifying the explanation. 180 | - Reorganized the "Using Custom Configuration" section in `README.md`, moving examples to the new Block III under "Using Predefined Modes" and focusing on specific use-case scenarios. 181 | - Updated the "Usage" section in `README.md` to include instructions for running after PyPI/Test PyPI installation (`entropy-password-generator`) and clarify repository execution options with `--mode` and `--length`. 182 | - Updated the version in `password_generator.py` to `0.5.0`, reflecting the latest release. 183 | - Enhanced the `python-app.yml` workflow by adding a "Reformat code with black" step to automatically correct indentation issues before linting, and added a `git diff` check to ensure changes are committed. 184 | 185 | ## [0.4.9] - 2025-05-03 186 | 187 | ### Added 188 | - Added a new section in `README.md` titled "Suggestions for Password Types," featuring a table with six of the strongest password modes (Modes 8, 9, 10 from Block I; Modes 15, 19, 20 from Block II) and their recommended services (e.g., high-security website logins, password manager master keys, cryptographic keys), providing practical guidance for users. 189 | 190 | ### Changed 191 | - Updated the version number in `README.md` to `0.4.9`, reflecting the latest release. 192 | - Removed the "Validating Password Strength" section from `README.md` to emphasize the inherent strength of each mode and allow users to choose modes based on their specific needs. 193 | - Removed quotes from password examples in the "Using Predefined Modes" section of `README.md` for Block I and Block II, improving visual clarity and aesthetics. 194 | 195 | ## [0.4.8] - 2025-05-02 196 | 197 | ### Added 198 | - Published the `entropy-password-generator` package to the Test Python Package Index (Test PyPI) with version 0.4.7, enabling users to install and test the package via `pip install -i https://test.pypi.org/simple/ entropy-password-generator`. The release is available at [https://test.pypi.org/project/entropy-password-generator/](https://test.pypi.org/project/entropy-password-generator/). 199 | - Added a new section in `README.md` titled "Installation from Test PyPI" with instructions for installing the package from Test PyPI, including the command and a link to the project’s Test PyPI page, improving accessibility for early adopters. 200 | - Added a badge in `README.md` for the Test PyPI release, linking to [https://test.pypi.org/project/entropy-password-generator/](https://test.pypi.org/project/entropy-password-generator/), to highlight the availability of the package and encourage testing. 201 | - Added a verification step in the `pypi-publish.yml` workflow to confirm successful publication to Test PyPI by checking the package’s availability and version on the Test PyPI index, ensuring reliability of the release process. 202 | - Added a note in `SECURITY.md` clarifying that the Test PyPI release is intended for testing purposes and should not be used in production environments, reinforcing security best practices. 203 | - Added an issue template (`issue_template.md`) in `.github/ISSUE_TEMPLATE/` to standardize issue reporting and improve contributor experience. 204 | - Added `config.yml` to `.github/ISSUE_TEMPLATE/` to customize the issue creation experience, disabling blank issues and adding a security vulnerability reporting link. 205 | - Added a "Reporting Issues" section to `README.md`, linking to the issue template to encourage community feedback and bug reporting. 206 | - Published the `entropy-password-generator` package version 0.4.8 to the Test Python Package Index, available at [https://test.pypi.org/project/entropy-password-generator/0.4.8/](https://test.pypi.org/project/entropy-password-generator/0.4.8/). 207 | 208 | ### Changed 209 | - Updated the "Usage" section in `README.md` to include an example of running the CLI command (`entropy-password-generator --mode 1`) after installing the package from Test PyPI, ensuring consistency with the new installation method. 210 | - Updated the version number in `pyproject.toml` and `__init__.py` to `0.4.8` to reflect the latest changes and prepare for future releases. 211 | - Enhanced the `pypi-publish.yml` workflow to include a step for generating a release changelog summary for version 0.4.8, extracted from `CHANGELOG.md`, to improve release documentation and visibility. 212 | - Updated the project’s Test PyPI history link in `README.md` to point to [https://test.pypi.org/project/entropy-password-generator/#history](https://test.pypi.org/project/entropy-password-generator/#history), ensuring users can view the release history directly. 213 | - Updated the "Coding Standards" section in `CONTRIBUTING.md` to include a note about using the `entropy-password-generator` command for testing after installation from Test PyPI, aligning with the new installation method and improving contributor guidance. 214 | - Updated the `python-app.yml` workflow to include a step for installing the package from Test PyPI and replaced `python -m` commands with `entropy-password-generator` to avoid `RuntimeWarning` and align with the new CLI functionality. 215 | 216 | ### Fixed 217 | - Fixed a minor typo in the `README.md` "Installation from Test PyPI" section, ensuring the pip command uses the correct index URL (`https://test.pypi.org/simple/`) for clarity and accuracy. 218 | - Fixed the filename from `gitignore.txt` to `.gitignore` to follow standard Git conventions, with no changes to the content. 219 | 220 | ## [0.4.7] - 2025-05-01 221 | 222 | ### Added 223 | - Added a "Visitors" section to `README.md` with a visitor counter badge using the `github-profile-views-counter` service, allowing tracking of repository visits. 224 | - Added an optional "GitHub Stats" section to `README.md` (commented out by default) using `github-readme-stats`, providing a template for displaying GitHub statistics like stars, commits, and contributions. 225 | - Added an explicit `dependencies = []` entry in `pyproject.toml` to clarify that the project has no external dependencies, enhancing transparency for users. 226 | - Added a CLI entry point in `pyproject.toml` under `[project.scripts]` (`entropy-password-generator = "entropy_password_generator.password_generator:main"`), allowing users to run the generator directly via the command `entropy-password-generator` after installation. 227 | - Added a step in `pypi-publish.yml` to clean previous build artifacts (`rm -rf dist/*`) before building the package, preventing potential conflicts during publication. 228 | - Added a caching step for pip dependencies in `pypi-publish.yml` using `actions/cache@v3`, improving the efficiency of the publication workflow. 229 | - Added a verification step in `pypi-publish.yml` to test the package installation from Test PyPI before publishing to the official PyPI, ensuring the package is functional. 230 | - Added `SECURITY.md` file to provide a security policy, detailing supported versions and instructions for reporting vulnerabilities, enhancing project security practices. 231 | - Added a "Security - Reporting a Vulnerability" section in `README.md` to inform users about the security policy and link to `SECURITY.md`, improving visibility of vulnerability reporting procedures. 232 | - Detailed specification for usage modes in **Using Custom Configuration** in `README.md` file. 233 | 234 | ### Changed 235 | - Updated the "Visitors" section in `README.md` to use the HITS service (hits.seeyoufarm.com) for the visitor counter badge, replacing the previous visitcount.itsvg.in service, which was found to be unavailable, ensuring reliable tracking of repository visits. 236 | - For usage modes in Using Custom Configuration in `README.md`. 237 | 238 | ## [0.4.6] - 2025-05-01 239 | 240 | ### Changed 241 | - Expanded the "Using Custom Configuration" section in `README.md` by adding five new examples, showcasing a wider range of customization options (e.g., short passwords with only letters, long passwords with digits and special characters, and configurations with ambiguous characters), encouraging users to explore the project's flexibility. 242 | 243 | ## [0.4.5] - 2025-05-01 244 | 245 | ### Changed 246 | - Updated `README.md` to use the direct command path (`python3 entropy_password_generator/password_generator.py`) instead of `python -m` in the "Using Predefined Modes" and "Using Custom Configuration" sections, avoiding the `RuntimeWarning` during execution. 247 | - Updated example passwords and entropy values in `README.md` to reflect recent test results for Modes 1, 3, 10, 12, 20, and custom configurations, ensuring consistency with the script's current output. 248 | - Added a note in the "Usage" section of `README.md` recommending the use of the direct command path to avoid the `RuntimeWarning`, improving user experience. 249 | - Updated `CONTRIBUTING.md` to use the correct direct command path (`python3 entropy_password_generator/password_generator.py`) in the "Coding Standards" section for test examples, ensuring accuracy. 250 | - Added a note in the "Coding Standards" section of `CONTRIBUTING.md` recommending the use of the direct command path to avoid the `RuntimeWarning`, providing clearer guidance for contributors. 251 | 252 | ## [0.4.4] - 2025-05-01 253 | 254 | ### Changed 255 | - Updated `CONTRIBUTING.md` to include a test example using the `--mode` argument (`python3 password_generator.py --mode 1`) in the "Submitting Pull Requests" section, reflecting the new CLI functionality and ensuring contributor awareness. 256 | - Enhanced `pypi-publish.yml` by adding a version consistency validation step, comparing the version in `pyproject.toml` and `__init__.py` before publishing to PyPI, to prevent release errors. 257 | 258 | ## [0.4.3] - 2025-04-30 259 | 260 | ### Added 261 | - Added `--mode ` argument to `password_generator.py` CLI, allowing users to select a specific predefined password generation mode (1 to 20) for Block I and Block II, simplifying the generation of individual modes. 262 | - Added a dictionary (`MODES`) in `password_generator.py` to centralize the configurations of all 20 password generation modes, improving maintainability and scalability. 263 | - Updated `README.md` to reflect the new `--mode` argument, including revised "CLI Options" and "Usage" sections with examples for generating passwords using `--mode` for each of the 20 modes. 264 | 265 | ### Changed 266 | - Modified the `main()` function in `password_generator.py` to prioritize `--mode` over manual configuration arguments, generating only the password for the specified mode instead of all modes. 267 | - Updated the CLI behavior in `password_generator.py` to display mode-specific output (e.g., "Mode X Password:") when `--mode` is used, improving user experience and clarity. 268 | - Reorganized the "Usage" section in `README.md` to separate predefined mode usage (using `--mode`) from custom configuration, enhancing readability and usability. 269 | 270 | ## [0.4.2] - 2025-04-29 271 | 272 | ### Fixed 273 | - Fixed an `ImportError` in `password_generator.py` by removing circular imports and ensuring proper package structure in `entropy_password_generator`. 274 | - Fixed CLI behavior to generate a single password based on the provided arguments, aligning with the usage instructions in `README.md` for Block I and Block II modes. 275 | 276 | ## [0.4.1] - 2025-04-28 277 | 278 | ### Added 279 | - Added execution instruction in the script header of `password_generator.py`. 280 | - Added `__init__.py` to `entropy_password_generator/` to ensure proper package structure, with version defined. 281 | - Added a note in the `README.md` under the "Password Entropy Calculation" section, addressing the limitations of the entropy calculation (\( E(R) = \log_2(R^L) \)). The note highlights potential overestimation in real-world scenarios and suggests using tools like `zxcvbn` for practical strength validation. 282 | - Added a styled quote block in the `README.md` to emphasize compliance with Proton© (75 bits) and NIST (80+ bits) entropy standards, enhancing visual appeal and user trust. 283 | - Added an entropy minimum warning in `password_generator.py`. If the entropy of a generated password is below 75 bits (Proton© standard), a warning is displayed with contextual suggestions to improve security (e.g., increase length, include more character types). 284 | - Added badges for "Keep a Changelog" and "Semantic Versioning" at the beginning of `CHANGELOG.md`, with links to their respective websites, to highlight adherence to these standards. 285 | - Added a debug step in the CI workflow (`.github/workflows/python-app.yml`) to display the current commit and content of `password_generator.py`, aiding in diagnosing pipeline issues. 286 | - Added a new section titled "Practical Applications of Entropy in Mobile Devices" in `PASSWORDENTROPYCALCULATION.md`, providing practical context for entropy calculations. 287 | - Added a table in `PASSWORDENTROPYCALCULATION.md` comparing screen lock methods on Android© and iOS© devices, with entropy values ranging from 9-18 bits to 78-130+ bits. 288 | - Added an introductory paragraph and a comparative note in the "Practical Applications of Entropy in Mobile Devices" section of `PASSWORDENTROPYCALCULATION.md`, linking entropy concepts to the project's password generation modes. 289 | - Added the `pyproject.toml` file to the project root, enabling modern package configuration for PyPI publication and ensuring compatibility with tools like `build` and `twine`. 290 | 291 | ### Changed 292 | - Updated version to `0.4.1` in `password_generator.py` to reflect recent changes. 293 | - Improved error handling in `password_generator.py` CLI with more descriptive messages and usage suggestion. 294 | - Updated CI workflow (`python-app.yml`) and PyPI publish workflow (`pypi-publish.yml`) to ensure package structure with `__init__.py`. 295 | - Updated `password_generator.py` to fix version inconsistency in header (from 0.2.0 to 0.3.0). 296 | - Updated CI workflow (`python-app.yml`) to add more test cases (no special characters, with ambiguous characters) and additional debugging. 297 | - Updated PyPI publish workflow (`pypi-publish.yml`) to test the built package before publishing. 298 | - Updated PyPI publish workflow (`pypi-publish.yml`) to fix checkout and publish errors by using manual git clone and correcting `packages_dir` parameter. 299 | - Reorganized the `README.md` to separate "Strong Passwords Block I" and "Block II" into distinct sections for CLI usage and examples, improving clarity and usability. 300 | - Updated entropy values in `README.md` to align with recalculated values based on the `password_generator.py` code, ensuring consistency across documentation. 301 | - Modified the CI workflow (`.github/workflows/python-app.yml`) to temporarily adjust the Flake8 command to lint only `password_generator.py`, isolating the source of linting errors during debugging. 302 | - Attempted to apply a custom color (Verde Brilhante 1, #39FF14) to the "Secure by Design" note in the `README.md` under the "Password Entropy Calculation" section using HTML inline styling, but decided against the change due to GitHub Markdown's limited support for custom color rendering. 303 | - Updated the default password length in `password_generator.py` from 66 to 72 characters to align with the expected default maximum length, enhancing the security of generated passwords by default. 304 | - Updated the `--length` argument description in `README.md` under the "CLI Options - Usage Block I" and "CLI Options - Usage Block II" sections to reflect the new default value (`default: 72`), ensuring consistency between the code and documentation. 305 | 306 | ### Fixed 307 | - Fixed linting errors in `password_generator.py` (Flake8, rule W293) by removing whitespace in blank lines on lines 224, 277, and 293, ensuring the CI/CD pipeline build passes successfully. 308 | - Addressed intermittent CI pipeline failures by confirming the correct version of `password_generator.py` (without whitespace in blank lines) and providing steps to update the repository and clear pipeline cache. 309 | 310 | ### Removed 311 | - Removed the "Build Status" badge from `README.md` due to persistent linting failures in the CI/CD pipeline, as the issue was related to linting rules rather than functional errors. 312 | 313 | ## [0.4.0] - 2025-04-27 314 | 315 | ### Added 316 | - Deep update to the code structure. 317 | - Added version number (0.4.0) to the authorship comment and output header. 318 | - Added `PASSWORDENTROPYCALCULATION.md` document with detailed entropy calculation explanation, benchmarks, and security recommendations. 319 | - Added authorship comment with project information at the beginning of `password_generator.py`. 320 | - Added header with project information (Copyright, Author, GitHub, License, Changelog) in the output of generated passwords. 321 | 322 | ### Changed 323 | - Updated PyPI publish workflow (`pypi-publish.yml`) to use `actions/checkout@v3` instead of `v4` to resolve persistent checkout error. 324 | - Updated PyPI publish workflow (`pypi-publish.yml`) to fix checkout error by adding event context debugging and `actions:read` permission. 325 | - Updated PyPI publish workflow (`pypi-publish.yml`) with debugging steps to verify Python version, build output, and artifact downloads. 326 | - Updated CI workflow (`python-app.yml`) to use `python -m` for script execution and added debug step to verify working directory. 327 | - Updated CI workflow (`python-app.yml`) to fix script execution by invoking the script directly instead of using `python -m`. 328 | - Refactored `password_generator.py` to fix flake8 linting errors (line length, complexity, spacing). 329 | - Updated minimum Python requirement to 3.8 in `README.md` and `pyproject.toml` due to Python 3.6 deprecation. 330 | - Updated CI workflow (`python-app.yml`) to test with Python 3.8, 3.10, and 3.12, removing Python 3.6. 331 | - Adjusted CLI usage commands in `README.md` to use the package structure (`python -m entropy_password_generator.password_generator`). 332 | - Restructured project as a Python package for PyPI publication, including `pyproject.toml` and package directory. 333 | - Added PyPI publish workflow (`.github/workflows/pypi-publish.yml`) to automatically publish releases. 334 | - Added CI workflow (`.github/workflows/python-app.yml`) for linting and basic script execution across multiple Python versions. 335 | - Adjusted the About section on the project page to fit the 350-character limit while maintaining key details. 336 | - Enhanced the About section on the project page with a more detailed and compelling description of features and benefits. 337 | - Updated entropy values in `README.md` to align with `PASSWORDENTROPYCALCULATION.md` (95.70 bits to 816.64 bits). 338 | - Adjusted link to `PASSWORDENTROPYCALCULATION.md` in `README.md` for clarity. 339 | - Reordered Project Capabilities table in `README.md` by increasing entropy (bits) for better clarity. 340 | - Updated Project Capabilities table in `README.md` with recalculated entropy values for all 20 password generation modes. 341 | - Adjusted separators in the authorship comment for better readability. 342 | 343 | ## [0.3.0] - 2025-04-25 344 | 345 | ### Added 346 | - Deep update to the code structure. 347 | - Version number (0.3.0) of the author comment and output header in `password_generator.py`. 348 | - Authorship comment with project information at the beginning of `password_generator.py`. 349 | - Header with project information (Copyright, Author, GitHub, License, Changelog) in the output of generated passwords. 350 | 351 | ### Changed 352 | - Adjusted separators in the authorship comment for better readability. 353 | 354 | ## [0.2.0] - 2025-04-24 355 | 356 | ### Added 357 | - Badges to `README.md` for License (MIT), Language (Python), and Maintenance status. 358 | - `Disclaimer` section to `README.md` with security recommendations (use of password managers and 2FA). 359 | 360 | ### Changed 361 | - Adjusted `Entropy Calculation` section in `README.md` with new formula notation (`E(R) = log₂(RL)`). 362 | - Reformulated `Contributing` section in `README.md` 363 | 364 | --- 365 | 366 | #### Copyright © 2025 Gerivan Costa dos Santos 367 | --------------------------------------------------------------------------------