# IsItSecure? 🔒
A comprehensive password security scanner that analyzes password strength and checks breach exposure using privacy-preserving techniques.
## Features
- **Password Strength Analysis**: Comprehensive evaluation including length, complexity, entropy, and pattern detection
- **Breach Database Integration**: Uses HaveIBeenPwned API with k-anonymity for privacy protection
- **Batch Processing**: Analyze multiple passwords efficiently
- **Privacy-First Design**: Never stores or logs raw passwords
- **CLI Tool**: Easy-to-use command-line interface
- **JSON Export**: Machine-readable results for integration
- **Actionable Recommendations**: Clear suggestions for improvement
## Installation
### From PyPI
```bash
pip install isitsecure
```
### From Source
```bash
git clone https://github.com/yourusername/isitsecure.git
cd isitsecure
pip install -e .
```
### Dependencies
```bash
pip install -r requirements.txt
```
## Usage
### CLI Commands
#### Check Single Password
```bash
# Interactive mode
isitsecure check
# Direct password input
isitsecure check --password "YourPassword123!"
# Skip breach check (faster)
isitsecure check --password "YourPassword123!" --no-breach
# JSON output
isitsecure check --password "YourPassword123!" --json
# Export results
isitsecure check --password "YourPassword123!" --output examples/report.json
```
#### Batch Analysis
```bash
# Check multiple passwords from file
isitsecure batch --file examples/sample_passwords.txt
# Export batch results
isitsecure batch --file examples/sample_passwords.txt --output examples/batch_report.json
# Skip breach checks for faster processing
isitsecure batch --file examples/sample_passwords.txt --no-breach
```
#### Generate Secure Passwords
```bash
# Generate 3 secure password suggestions
isitsecure generate
# Generate custom number of suggestions
isitsecure generate --count 5
```
#### Demo Mode
```bash
# Run demonstration with sample passwords
isitsecure demo
```
### Using as a Library
```python
from isitsecure import PasswordScanner
scanner = PasswordScanner()
# Analyze single password
result = scanner.scan_password('MyPassword123!', {
'check_breaches': True,
'format': 'json'
})
# Batch analysis
passwords = ['password1', 'StrongP@ss!2024', 'weak123']
results = scanner.scan_batch(passwords)
# Generate suggestions
suggestions = scanner.generate_suggestions(5)
```
## File Formats
### Password Input File
Create a text file with one password per line:
```
password123
MyStr0ng!P@ssw0rd
admin
letmein
```
### JSON Output Format
```json
{
"report_info": {
"created_by": "IsItSecure",
"project_url": "https://github.com/chrismat-05/IsItSecure"
},
"timestamp": "2025-08-27T11:31:14.068148",
"version": "1.0.0",
"results": [
{
"analysis": {
"password": "YourPassword123!",
"length": 16,
"strength": {
"length": {
"score": 100,
"feedback": "Excellent length",
"length": 16
},
"complexity": {
"score": 100,
"feedback": "High complexity"
},
"uniqueness": {
"score": 100,
"feedback": "Appears unique"
}
},
"entropy": 104.87,
"composition": {
"has_lowercase": true,
"has_uppercase": true,
"has_digits": true,
"has_symbols": true,
"has_spaces": false,
"lowercase_count": 10,
"uppercase_count": 2,
"digit_count": 3,
"symbol_count": 1
},
"weaknesses": [],
"suggestions": [
"Use a unique password for each account",
"Enable two-factor authentication where possible"
],
"score": 100,
"risk_level": "Low"
},
"breach_data": {
"is_breached": true,
"breach_count": 2,
"risk_level": "Low"
},
"timestamp": "2025-08-27T11:31:14.059156"
}
]
}
```
## Security & Privacy
- **No Data Storage**: Passwords are never stored or logged
- **K-Anonymity**: Uses SHA-1 hash prefixes for breach checks (only first 5 characters sent to API)
- **Rate Limiting**: Built-in delays between API requests to respect service limits
## 📊 Analysis Criteria
- **Strength Score (0-100)**: Based on length, complexity, entropy, blacklist, patterns
- **Risk Level**: Low, Medium, High, Critical
- **Breach Exposure**: Yes/No, number of exposures
- **Suggestions**: Actionable tips and passphrase ideas
---
## 🤝 Contributing
Pull requests, issues, and feature suggestions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
---
## 📜 License
MIT License. See [LICENSE.txt](LICENSE.txt) for details.
---
## 👤 Credits
Created by Chris. Inspired by best practices in cybersecurity and privacy.
Raw data
{
"_id": null,
"home_page": "https://github.com/chrismat-05/IsItSecure",
"name": "isitsecure",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "password, security, breach, scanner, cybersecurity, privacy",
"author": "Chris Mathew Aje",
"author_email": "Chris Mathew Aje <chrismaje63@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/9e/cf/8e83b2dedd01a5098c312d95ae0eb4d2fc108487c6460970b602ead466bc/isitsecure-1.0.0.tar.gz",
"platform": null,
"description": "# IsItSecure? \ud83d\udd12\n\nA comprehensive password security scanner that analyzes password strength and checks breach exposure using privacy-preserving techniques.\n\n## Features\n\n- **Password Strength Analysis**: Comprehensive evaluation including length, complexity, entropy, and pattern detection\n- **Breach Database Integration**: Uses HaveIBeenPwned API with k-anonymity for privacy protection\n- **Batch Processing**: Analyze multiple passwords efficiently\n- **Privacy-First Design**: Never stores or logs raw passwords\n- **CLI Tool**: Easy-to-use command-line interface\n- **JSON Export**: Machine-readable results for integration\n- **Actionable Recommendations**: Clear suggestions for improvement\n\n## Installation\n\n### From PyPI\n```bash\npip install isitsecure\n```\n\n### From Source\n```bash\ngit clone https://github.com/yourusername/isitsecure.git\ncd isitsecure\npip install -e .\n```\n\n### Dependencies\n```bash\npip install -r requirements.txt\n```\n\n## Usage\n\n### CLI Commands\n\n#### Check Single Password\n```bash\n# Interactive mode\nisitsecure check\n\n# Direct password input\nisitsecure check --password \"YourPassword123!\"\n\n# Skip breach check (faster)\nisitsecure check --password \"YourPassword123!\" --no-breach\n\n# JSON output\nisitsecure check --password \"YourPassword123!\" --json\n\n# Export results\nisitsecure check --password \"YourPassword123!\" --output examples/report.json\n```\n\n#### Batch Analysis\n```bash\n# Check multiple passwords from file\nisitsecure batch --file examples/sample_passwords.txt\n\n# Export batch results\nisitsecure batch --file examples/sample_passwords.txt --output examples/batch_report.json\n\n# Skip breach checks for faster processing\nisitsecure batch --file examples/sample_passwords.txt --no-breach\n```\n\n#### Generate Secure Passwords\n```bash\n# Generate 3 secure password suggestions\nisitsecure generate\n\n# Generate custom number of suggestions\nisitsecure generate --count 5\n```\n\n#### Demo Mode\n```bash\n# Run demonstration with sample passwords\nisitsecure demo\n```\n\n### Using as a Library\n\n```python\nfrom isitsecure import PasswordScanner\n\nscanner = PasswordScanner()\n\n# Analyze single password\nresult = scanner.scan_password('MyPassword123!', {\n 'check_breaches': True,\n 'format': 'json'\n})\n\n# Batch analysis\npasswords = ['password1', 'StrongP@ss!2024', 'weak123']\nresults = scanner.scan_batch(passwords)\n\n# Generate suggestions\nsuggestions = scanner.generate_suggestions(5)\n```\n\n## File Formats\n\n### Password Input File\nCreate a text file with one password per line:\n```\npassword123\nMyStr0ng!P@ssw0rd\nadmin\nletmein\n```\n\n### JSON Output Format\n```json\n{\n \"report_info\": {\n \"created_by\": \"IsItSecure\",\n \"project_url\": \"https://github.com/chrismat-05/IsItSecure\"\n },\n \"timestamp\": \"2025-08-27T11:31:14.068148\",\n \"version\": \"1.0.0\",\n \"results\": [\n {\n \"analysis\": {\n \"password\": \"YourPassword123!\",\n \"length\": 16,\n \"strength\": {\n \"length\": {\n \"score\": 100,\n \"feedback\": \"Excellent length\",\n \"length\": 16\n },\n \"complexity\": {\n \"score\": 100,\n \"feedback\": \"High complexity\"\n },\n \"uniqueness\": {\n \"score\": 100,\n \"feedback\": \"Appears unique\"\n }\n },\n \"entropy\": 104.87,\n \"composition\": {\n \"has_lowercase\": true,\n \"has_uppercase\": true,\n \"has_digits\": true,\n \"has_symbols\": true,\n \"has_spaces\": false,\n \"lowercase_count\": 10,\n \"uppercase_count\": 2,\n \"digit_count\": 3,\n \"symbol_count\": 1\n },\n \"weaknesses\": [],\n \"suggestions\": [\n \"Use a unique password for each account\",\n \"Enable two-factor authentication where possible\"\n ],\n \"score\": 100,\n \"risk_level\": \"Low\"\n },\n \"breach_data\": {\n \"is_breached\": true,\n \"breach_count\": 2,\n \"risk_level\": \"Low\"\n },\n \"timestamp\": \"2025-08-27T11:31:14.059156\"\n }\n ]\n}\n```\n\n## Security & Privacy\n\n- **No Data Storage**: Passwords are never stored or logged\n- **K-Anonymity**: Uses SHA-1 hash prefixes for breach checks (only first 5 characters sent to API)\n- **Rate Limiting**: Built-in delays between API requests to respect service limits\n\n## \ud83d\udcca Analysis Criteria\n\n- **Strength Score (0-100)**: Based on length, complexity, entropy, blacklist, patterns\n- **Risk Level**: Low, Medium, High, Critical\n- **Breach Exposure**: Yes/No, number of exposures\n- **Suggestions**: Actionable tips and passphrase ideas\n\n---\n\n## \ud83e\udd1d Contributing\n\nPull requests, issues, and feature suggestions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n---\n\n## \ud83d\udcdc License\n\nMIT License. See [LICENSE.txt](LICENSE.txt) for details.\n\n---\n\n## \ud83d\udc64 Credits\n\nCreated by Chris. Inspired by best practices in cybersecurity and privacy.\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A comprehensive password security scanner that analyzes strength and checks breach exposure",
"version": "1.0.0",
"project_urls": {
"Bug Reports": "https://github.com/chrismat-05/IsItSecure/issues",
"Homepage": "https://github.com/chrismat-05/IsItSecure",
"Source": "https://github.com/chrismat-05/IsItSecure"
},
"split_keywords": [
"password",
" security",
" breach",
" scanner",
" cybersecurity",
" privacy"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "57bb1c15432ee6566e61ddd686c1a981e22543b615e8e2f611784be080cd370d",
"md5": "607085a24436738e20580a8e5a4b06a7",
"sha256": "64bfa871cd08879b41fd83409ce22f6d01e3507f59cb864ca3fd5ee48e861851"
},
"downloads": -1,
"filename": "isitsecure-1.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "607085a24436738e20580a8e5a4b06a7",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 16865,
"upload_time": "2025-08-27T06:31:10",
"upload_time_iso_8601": "2025-08-27T06:31:10.482247Z",
"url": "https://files.pythonhosted.org/packages/57/bb/1c15432ee6566e61ddd686c1a981e22543b615e8e2f611784be080cd370d/isitsecure-1.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9ecf8e83b2dedd01a5098c312d95ae0eb4d2fc108487c6460970b602ead466bc",
"md5": "561f1a050de68f118b71489e996a4bfd",
"sha256": "f1f6d99817fd00c681bb4d2d8526d347d83878f764aa08f5df176519c2afc123"
},
"downloads": -1,
"filename": "isitsecure-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "561f1a050de68f118b71489e996a4bfd",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 20962,
"upload_time": "2025-08-27T06:31:11",
"upload_time_iso_8601": "2025-08-27T06:31:11.940151Z",
"url": "https://files.pythonhosted.org/packages/9e/cf/8e83b2dedd01a5098c312d95ae0eb4d2fc108487c6460970b602ead466bc/isitsecure-1.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-27 06:31:11",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "chrismat-05",
"github_project": "IsItSecure",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "requests",
"specs": [
[
">=",
"2.28.0"
]
]
},
{
"name": "colorama",
"specs": [
[
">=",
"0.4.6"
]
]
},
{
"name": "tabulate",
"specs": [
[
">=",
"0.9.0"
]
]
},
{
"name": "tqdm",
"specs": [
[
">=",
"4.64.0"
]
]
}
],
"lcname": "isitsecure"
}