PassForge - Универсальный CLI-генератор паролей
Готовый к промышленному использованию, криптографически стойкий CLI-генератор паролей с 17 режимами генерации, прозрачностью энтропии и обширными возможностями настройки.



Возможности
17 режимов генерации
| Генератор | Команда | Описание |
|---|
| Случайный | random, r | Криптографически стойкие случайные символьные пароли |
| Парольная фраза | phrase, p | Фразы на основе слов с использованием списка EFF |
| Leetspeak | leet, l | Фразы с заменой символов (A→4, E→3 и т.д.) |
| PIN | pin | Числовые PIN-коды настраиваемой длины |
| Произносимый | pronounce, pr | Удобные для произнесения пароли на основе слогов |
| UUID | uuid, u | UUID по RFC 4122/9562 (v1, v4, v7) и короткие (Base58) |
| Base64 | base64, b64 | Секреты в безопасном для URL формате base64 |
| JWT Secret | jwt | Секреты с высокой энтропией для подписи JWT (HS256/384/512) |
| WiFi Key | wifi | Ключи, совместимые с WPA2/WPA3 (8-63 символа) |
| Лицензионный ключ | license | Ключи лицензий ПО (формат AXB, например 5x5) |
| Коды восстановления | recovery | Резервные коды 2FA (числовые или на основе слов) |
| OTP-код/секрет | otp | Коды и секреты TOTP/HOTP с URI otpauth |
| Шаблон | pattern | Пароли на основе визуальной сетки |
| Тематическая фраза | phrase (польз.) | Фразы из тематических списков слов (животные, научная фантастика и т.д.) |
| Фонетический NATO | , |
- Готовые профили: генерация в один клик для типовых сценариев (Strong, Memorable, Dev и т.д.)
- Интерактивное меню: полнофункциональное меню для пошаговой генерации
- Пусковые файлы для платформ: специальные скрипты
.bat и .sh с интерактивными меню
- Криптографическая безопасность: использует модуль Python
secrets для CSPRNG
- Прозрачность энтропии: вычисление энтропии в реальном времени и анализ стойкости
- Анализ zxcvbn: проверка стойкости пароля на основе шаблонов (словарные атаки, последовательности)
- Безопасный буфер обмена: автоматическая очистка через настраиваемый тайм-аут
- Живые OTP-коды: генерирует текущие 6/8-значные коды TOTP вместе с секретом
- QR-коды для OTP: сканируемые QR-коды для приложений-аутентификаторов
- Цветовая маркировка вывода: визуальное различие типов символов
- Экспорт в JSON: машиночитаемый вывод для скриптирования
- Сбалансированный режим: обеспечивает читаемое распределение (60% букв, 20% цифр, 20% символов)
- Руководство по генераторам: полная документация по всем 14 типам генераторов.
- Зашифрованная история (Хранилище): автоматически шифрует сохраненные пароли с помощью AES-128 (Fernet).
- Безопасное хранение в хранилище: выделенное хранилище управляет криптографическими ключами через
.env (рекомендуется) или устаревший .vault.key со строгими правами доступа 0600
- Архитектура с нулевой утечкой: 🛡️ Исходный код и журналы заблокированы для доступа из браузера в режиме PWA; конфиденциальные вводы маскируются в режиме CLI для анализа энтропии.
Установка
# Clone the repository
git clone https://github.com/krishnakanthb13/password_generator.git
cd password_generator
# Install dependencies (colorama, cryptography, pyperclip, etc.)
pip install -r requirements.txt
Быстрый старт
# Generate a 20-character random password
python main.py random -l 20
# Generate a 4-word passphrase
python main.py phrase -w 4 --capitalize
# Generate a leetspeak passphrase
python main.py leet -w 3 -s _
# Generate with entropy analysis
python main.py --show-entropy random -l 16
# Launch interactive mode
python main.py --interactive
# Use a preset profile (Strong)
python main.py --preset strong --show-entropy
Примеры использования
Случайные пароли
# Basic 16-character password
python main.py random
# 24-character, letters only
python main.py random -l 24 --no-symbols --no-digits
# Easy to read (no 0/O, 1/l/I)
python main.py --easy-read random -l 20
# With minimum requirements
python main.py random -l 16 --min-upper 2 --min-digits 2 --min-symbols 1
# Balanced mode (mostly letters, fewer symbols)
python main.py random -l 24 --balanced
Парольные фразы
# Standard 4-word passphrase
python main.py phrase -w 4
# Capitalized with underscore separator
python main.py phrase -w 5 -s _ --capitalize
# Alternate case (High Entropy)
python main.py phrase -w 4 -s . --alternate
# Output: aPpLe.bAnAnA.cHeRrY.dAtE
# Uppercase with hyphen separator (High Entropy)
python main.py phrase -w 4 -s . --uppercase
# Output: APPLE-BANANA-CHERRY-DATE
# Leetspeak version (Smart 50% substitution)
python main.py leet -w 4 -s -
# Output: 4PPl3.8@N@[email protected]
# Themed Passphrase (using 'animals.txt')
python main.py phrase -w 4 --capitalize --wordlist data/wordlists/animals.txt
# Output: Tiger-Falcon-Shark-Wolf
Ключи ПО (A x B)
# 5 segments of 5 characters
python main.py license --segments 5 --segment-length 5
# 4 segments of 8 characters
python main.py license --segments 4 --segment-length 8
Токены разработчика
# JWT secret for HS256
python main.py jwt --bits 256
# Base64 API key
python main.py base64 -b 32 --url-safe
# UUID token (v4 Random)
python main.py uuid --upper
# UUID v7 (Time-based, sortable)
python main.py uuid --ver 7
# Or shortcut
python main.py uuid --v7
# Short UUID (Base58 encoded, ~22 chars)
python main.py uuid --short
# Generate a v7 UUID using the shortcut
python main.py u --v7
# Generate 10 short v4 UUIDs
python main.py uuid --v4 --short -n 10
# NATO Phonetic Conversion
python main.py phonetic --text "PassForge"
# Output: Papa-Alpha-Sierra-Sierra-Foxtrot-Oscar-Romeo-Golf-Echo
Безопасность и ведение журнала
# Analyze an existing password
python main.py analyze "p@ssword123"
# Log to history
python main.py --log random -l 16
# View last 10 history entries (default)
python main.py history
# View all history entries (decrypted on the fly)
python main.py history --all
# View history with redacted passwords
python main.py history --redact
# Export history (Redacted by default)
python main.py history --export backup.json
# Export history (Plaintext - requires caution)
python main.py history --export secrets.csv --no-redact
# JSON output for scripts
python main.py --json jwt --bits 256
Справочник команд
Опции, специфичные для генераторов
Случайный (random, r)
Парольная фраза (phrase, p)
Leetspeak (leet, l)
PIN (pin)
| Флаг | По умолчанию | Описание |
|---|
-l, --length | 6 | Длина PIN (4-64) |
-n, --count | 1 | Количество генерируемых |
Произносимый (pronounce, pr)
| Флаг | По умолчанию | Описание |
|---|
-l, --length | 12 | Длина пароля (4-128) |
-n, --count | 1 | Количество генерируемых |
UUID (uuid)
Base64 (base64, b64)
| Флаг | По умолчанию | Описание |
|---|
-b, --bytes | 32 | Количество случайных байтов |
--url-safe | - | Использовать безопасные для URL символы |
JWT Secret (jwt)
| Флаг | По умолчанию | Описание |
|---|
--bits | 256 | Разрядность (256, 384, 512) |
--hex | - | Вывод в виде шестнадцатеричной строки |
WiFi Key (wifi)
| Флаг | По умолчанию | Описание |
|---|
-l, --length | 24 | Длина ключа (8-63, по умолчанию: 24) |
--simple | - | Только буквы и цифры (без символов) |
Лицензионный ключ (license)
| Флаг | По умолчанию | Описание |
|---|
--segments | 4 | Количество сегментов (2-64) |
--segment-length | 4 | Символов на сегмент (2-32) |
Коды восстановления (recovery)
OTP Secret (otp)
| Флаг | По умолчанию | Описание |
|---|
--digits | 6 | Длина кода (6 или 8) |
|
Шаблон (pattern)
| Флаг | По умолчанию | Описание |
|---|
--grid | 3 | Размер сетки (например, 3x3) |
Фонетический (phonetic, ph)
| Флаг | По умолчанию | Описание |
|---|
--text | - | Текст для преобразования в алфавит NATO |
-l, --length | 8 | Длина случайной последовательности (4-64) |
История (history)
Руководство по энтропии
PassForge предоставляет всесторонний Отчёт по энтропии, включая размер исходного пула символов, биты Шеннона и оценку времени полного перебора.
Примечание: Подробное объяснение каждого типа генератора см. в LITERATURE.md.
Структура проекта
password_generator/
├── main.py # Точка входа
├── requirements.txt # Зависимости
├── src/
│ ├── __init__.py
│ ├── cli.py # Парсер аргументов и баннер
│ ├── command_handler.py # Маршрутизация команд
│ ├── interactive.py # Интерактивное меню
│ ├── generators/ # Все генераторы паролей
│ │ ├── base.py # Абстрактный базовый класс
│ │ ├── random_password.py # Генератор случайных паролей
│ │ ├── passphrase.py # Генератор парольных фраз
│ │ ├── leetspeak.py # Генератор Leetspeak
│ │ ├── pin.py # Генератор PIN
│ │ ├── pronounceable.py # Генератор произносимых паролей
│ │ ├── uuid_token.py # Генератор UUID токенов
│ │ ├── base64_secret.py # Генератор секретов Base64
│ │ ├── jwt_secret.py # Генератор секретов JWT
│ │ ├── wifi_key.py # Генератор ключей WiFi
│ │ ├── license_key.py # Генератор лицензионных ключей
│ │ ├── recovery_codes.py # Генератор кодов восстановления
│ │ ├── otp.py # Генератор OTP
│ │ ├── pattern.py # Генератор шаблонов
│ │ └── phonetic.py # Фонетический генератор NATO
│ ├── security/
│ │ ├── entropy.py # Калькулятор энтропии
│ │ ├── strength_checker.py # Интеграция zxcvbn
│ │ └── vault.py # Шифрование истории
│ ├── output/
│ │ ├── formatter.py # Цветной вывод
│ │ ├── logger.py # Журналирование истории
│ │ ├── clipboard.py # Безопасная работа с буфером обмена
│ │ └── qrcode_gen.py # Генерация QR-кодов для OTP
│ ├── config/
│ │ ├── loader.py # Загрузчик конфигурации YAML/JSON
│ │ └── presets.py # Предопределённые профили безопасности
├── data/
│ └── wordlists/ # Тематические списки слов (animals.txt, biology.txt и т.д.)
└── tests/
Тестирование
# Запустить все тесты
python -m pytest tests/ -v
# Запустить конкретный класс тестов
python -m pytest tests/test_generators.py::TestRandomPasswordGenerator -v
# Запустить с покрытием
python -m pytest tests/ --cov=src --cov-report=html
Все 53 модульных теста покрывают:
- Все 15 специализированных режимов генераторов
- Калькуляторы энтропии и стойкости (zxcvbn)
- Автоматическая очистка буфера обмена и безопасное хранение
- Логика генерации QR-кодов в ASCII
- Загрузка конфигурации и профили
Конфигурация
PassForge поддерживает файлы конфигурации в формате YAML или JSON.
Расположение файлов конфигурации (поиск в порядке):
./passforge.yaml или ./passforge.json
./.passforge.yaml или ./.passforge.json
~/.passforge/config.yaml или ~/.passforge/config.json
Пример конфигурации
{
"random": {
"length": 20,
"easy_read": true
},
"passphrase": {
"words": 5,
"capitalize": true
},
"output": {
"show_entropy": true
}
}
Все доступные параметры см. в passforge.example.json.
Сборка автономного исполняемого файла
PassForge можно скомпилировать в единый автономный исполняемый файл с помощью PyInstaller.
Windows
# Using the build script
passforge_build.bat
# Or manually
pip install pyinstaller
pyinstaller --onefile --name passforge --console main.py
Linux/macOS
# Using the build script
chmod +x passforge_build.sh
./passforge_build.sh
# Or manually
pip install pyinstaller
pyinstaller --onefile --name passforge --console main.py
Исполняемый файл будет создан в папке dist/ (~7 МБ, без внешних зависимостей).
🌐 PassForge Web (PWA-дополнение)
PassForge теперь включает современный, адаптивный веб-интерфейс (PWA), который предоставляет визуальный способ создания и управления паролями, сохраняя полную совместимость с CLI-версией.
Ключевые возможности
- Боковая панель: удобная навигация между всеми типами генераторов.
- Визуальные ползунки: настройка длины и количества слов с помощью интерактивных ползунков.
- Поддержка QR: мгновенная генерация QR-кодов для передачи паролей или OTP-секретов.
- Тёмная/светлая тема: премиальная эстетика с автоматическим переключением в зависимости от системных настроек.
- Установка: поддержка установки PWA на Windows, Linux и мобильных устройствах.
- Общая история: использует тот же зашифрованный файл журнала, что и CLI.
Запуск PWA
Для запуска веб-интерфейса выполните скрипт запуска для вашей ОС:
- Windows:
passforge_pwa.bat
- Linux/macOS:
passforge_pwa.sh
[!IMPORTANT]
Усиление безопасности (v34+): PWA теперь использует обработчик SecureStaticFiles, который явно блокирует доступ браузера к исходным файлам Python, журналам и криптографическим ключам. Доступ к истории защищён внутренним рукопожатием API-ключа. Логика фронтенда также включает защитные обёртки для внешних ресурсов CDN, чтобы обеспечить работоспособность даже при заблокированном CDN.
[!TIP]
Доступность сборки: Файлы PWA включены в дистрибутивы Исходный код и ZIP/Tarball. PWA не встроен в однофайловый двоичный файл .exe.
Запускающий скрипт автоматически установит необходимые зависимости (fastapi, uvicorn), запустит локальный сервер по адресу http://127.0.0.1:8093 и откроет браузер.
Лицензия
Лицензия GPL v3 — подробности см. в LICENSE.
Вклад
Вклад приветствуется! Пожалуйста, прочтите наши рекомендации по внесению изменений перед отправкой PR.