PassForge - Générateur de mots de passe tout-en-un en CLI
Un générateur de mots de passe CLI prêt pour la production, cryptographiquement sécurisé, avec 17 modes de génération, transparence d'entropie et options de personnalisation complètes.



Fonctionnalités
17 modes de génération
| Générateur | Commande | Description |
|---|
| Aléatoire | random, r | Mots de passe aléatoires cryptographiquement sécurisés |
| Passphrase | phrase, p | Passphrases basées sur des mots utilisant la liste EFF |
| Leetspeak | leet, l | Passphrases avec substitution de caractères (A→4, E→3, etc.) |
| Code PIN | pin | Codes PIN numériques de longueur configurable |
| Prononçable | pronounce, pr | Mots de passe faciles à prononcer basés sur des syllabes |
| UUID | uuid, u | UUID RFC 4122/9562 (v1, v4, v7) et court (Base58) |
| Base64 | base64, b64 | Secrets encodés en base64 sécurisés pour les URL |
| Secret JWT | jwt | Secrets à haute entropie pour la signature JWT (HS256/384/512) |
| Clé WiFi | wifi | Clés compatibles WPA2/WPA3 (8-63 caractères) |
| Clé de licence | license | Clés de licence logicielles (format AXB, ex. 5x5) |
| Codes de récupération | recovery | Codes de sauvegarde 2FA (numériques ou basés sur des mots) |
| Code/Secret OTP | otp | Codes TOTP/HOTP et secrets avec URI otpauth |
| Motif | pattern | Mots de passe basés sur des grilles visuelles |
| Phrase thématique | phrase (personnalisé) | Passphrases à partir de listes de mots thématiques (animaux, science-fiction, etc.) |
|
- Profils prédéfinis : Génération en un clic pour les cas d'utilisation courants (Fort, Mémorisable, Développeur, etc.)
- Menu interactif : Menu complet pour une génération guidée
- Lanceurs plateforme : Scripts
.bat et .sh dédiés avec menus interactifs
- Sécurité cryptographique : Utilise le module
secrets de Python pour le CSPRNG
- Transparence d'entropie : Calcul d'entropie en temps réel et analyse de robustesse
- Analyse zxcvbn : Vérification de la robustesse des mots de passe basée sur des motifs (attaques par dictionnaire, séquences)
- Presse-papiers sécurisé : Effacement automatique du presse-papiers après un délai configurable
- Codes OTP en direct : Génère les codes TOTP actuels à 6/8 chiffres en parallèle du secret
- Codes QR pour OTP : Codes QR scannables pour les applications d'authentification
- Sortie colorée : Distinction visuelle entre les types de caractères
- Export JSON : Sortie lisible par machine pour les scripts
- Mode équilibré : Assure une distribution lisible (60% Lettres, 20% Chiffres, 20% Symboles)
- Guide du générateur : Documentation complète pour les 14 types de générateurs.
- Historique chiffré (Coffre) : Chiffre automatiquement les mots de passe sauvegardés avec AES-128 (Fernet).
- Stockage sécurisé du coffre : Un coffre dédié gère les clés cryptographiques via
.env (recommandé) ou .vault.key hérité avec des permissions strictes 0600
Installation
# Clonez le dépôt
git clone https://github.com/krishnakanthb13/password_generator.git
cd password_generator
# Installez les dépendances (colorama, cryptography, pyperclip, etc.)
pip install -r requirements.txt
Démarrage rapide
# Générer un mot de passe aléatoire de 20 caractères
python main.py random -l 20
# Générer une passphrase de 4 mots
python main.py phrase -w 4 --capitalize
# Générer une passphrase en leetspeak
python main.py leet -w 3 -s _
# Générer avec analyse d'entropie
python main.py --show-entropy random -l 16
# Lancer le mode interactif
python main.py --interactive
# Utiliser un profil prédéfini (Fort)
python main.py --preset strong --show-entropy
Exemples d'utilisation
Mots de passe aléatoires
# Mot de passe basique de 16 caractères
python main.py random
# 24 caractères, lettres seulement
python main.py random -l 24 --no-symbols --no-digits
# Facile à lire (pas de 0/O, 1/l/I)
python main.py --easy-read random -l 20
# Avec exigences minimales
python main.py random -l 16 --min-upper 2 --min-digits 2 --min-symbols 1
# Mode équilibré (surtout des lettres, moins de symboles)
python main.py random -l 24 --balanced
Passphrases
# Passphrase standard de 4 mots
python main.py phrase -w 4
# Avec capitalisation et séparateur underscore
python main.py phrase -w 5 -s _ --capitalize
# Casse alternée (Haute entropie)
python main.py phrase -w 4 -s . --alternate
# Sortie : aPpLe.bAnAnA.cHeRrY.dAtE
# Tout en majuscules avec séparateur trait d'union (Haute entropie)
python main.py phrase -w 4 -s . --uppercase
# Sortie : APPLE-BANANA-CHERRY-DATE
# Version leetspeak (Substitution intelligente de 50 %)
python main.py leet -w 4 -s -
# Sortie : 4PPl3.8@N@[email protected]
# Passphrase thématique (en utilisant 'animals.txt')
python main.py phrase -w 4 --capitalize --wordlist data/wordlists/animals.txt
# Sortie : Tiger-Falcon-Shark-Wolf
Clés logicielles (A x B)
# 5 segments de 5 caractères
python main.py license --segments 5 --segment-length 5
# 4 segments de 8 caractères
python main.py license --segments 4 --segment-length 8
Jetons développeur
# Secret JWT pour HS256
python main.py jwt --bits 256
# Clé API Base64
python main.py base64 -b 32 --url-safe
# Jeton UUID (v4 Aléatoire)
python main.py uuid --upper
# UUID v7 (temporel, triable)
python main.py uuid --ver 7
# Ou raccourci
python main.py uuid --v7
# UUID court (encodé Base58, ~22 caractères)
python main.py uuid --short
# Générer un UUID v7 avec le raccourci
python main.py u --v7
# Générer 10 UUID v4 courts
python main.py uuid --v4 --short -n 10
# Conversion phonétique OTAN
python main.py phonetic --text "PassForge"
# Sortie : Papa-Alpha-Sierra-Sierra-Foxtrot-Oscar-Romeo-Golf-Echo
Sécurité & Journalisation
# Analyser un mot de passe existant
python main.py analyze "p@ssword123"
# Enregistrer dans l'historique
python main.py --log random -l 16
# Voir les 10 dernières entrées d'historique (par défaut)
python main.py history
# Voir toutes les entrées d'historique (déchiffrées à la volée)
python main.py history --all
# Voir l'historique avec mots de passe expurgés
python main.py history --redact
# Exporter l'historique (Expurgé par défaut)
python main.py history --export backup.json
# Exporter l'historique (en texte clair - nécessite prudence)
python main.py history --export secrets.csv --no-redact
# Sortie JSON pour les scripts
python main.py --json jwt --bits 256
Référence des commandes
Options spécifiques aux générateurs
Aléatoire (random, r)
Passphrase (phrase, p)
Leetspeak (leet, l)
Code PIN (pin)
| Option | Défaut | Description |
|---|
-l, --length | 6 | Longueur du PIN (4-64) |
-n, --count | 1 | Nombre à générer |
Prononçable (pronounce, pr)
| Option | Défaut | Description |
|---|
-l, --length | 12 | Longueur du mot de passe (4-128) |
-n, --count | 1 | Nombre à générer |
UUID (uuid)
Base64 (base64, b64)
| Option | Défaut | Description |
|---|
-b, --bytes | 32 | Nombre d'octets aléatoires |
--url-safe | - | Utiliser des caractères sécurisés pour les URL |
Secret JWT (jwt)
| Option | Défaut | Description |
|---|
--bits | 256 | Longueur en bits (256, 384, 512) |
--hex | - | Sortie sous forme de chaîne hexadécimale |
Clé WiFi (wifi)
| Option | Défaut | Description |
|---|
-l, --length | 24 | Longueur de la clé (8-63, défaut : 24) |
--simple | - | Alphanumérique uniquement (pas de symboles) |
Clé de licence (license)
| Option | Défaut | Description |
|---|
--segments | 4 | Nombre de segments (2-64) |
--segment-length | 4 | Caractères par segment (2-32) |
Codes de récupération (recovery)
Secret OTP (otp)
| Option | Défaut | Description |
|---|
--digits | 6 | Longueur du code (6 ou 8) |
|
Motif (pattern)
| Option | Défaut | Description |
|---|
--grid | 3 | Taille de la grille (ex. 3x3) |
Phonétique (phonetic, ph)
| Option | Défaut | Description |
|---|
--text | - | Texte à convertir en alphabet OTAN |
-l, --length | 8 | Longueur de la séquence aléatoire (4-64) |
Historique (history)
Guide d'entropie
PassForge fournit un rapport d'entropie complet incluant la taille brute du pool de caractères, les bits de Shannon et les estimations de temps de force brute.
Remarque : Pour une explication détaillée de chaque type de générateur, voir LITERATURE.md.
Structure du projet
password_generator/
├── main.py # Point d'entrée
├── requirements.txt # Dépendances
├── src/
│ ├── __init__.py
│ ├── cli.py # Analyseur d'arguments & bannière
│ ├── command_handler.py # Routage des commandes
│ ├── interactive.py # Menu interactif
│ ├── generators/ # Tous les générateurs de mots de passe
│ │ ├── base.py # Classe de base abstraite
│ │ ├── random_password.py # Générateur de mots de passe aléatoires
│ │ ├── passphrase.py # Générateur de passphrases
│ │ ├── leetspeak.py # Générateur leetspeak
│ │ ├── pin.py # Générateur de codes PIN
│ │ ├── pronounceable.py # Générateur de mots de passe prononçables
│ │ ├── uuid_token.py # Générateur de jetons UUID
│ │ ├── base64_secret.py # Générateur de secrets Base64
│ │ ├── jwt_secret.py # Générateur de secrets JWT
│ │ ├── wifi_key.py # Générateur de clés WiFi
│ │ ├── license_key.py # Générateur de clés de licence
│ │ ├── recovery_codes.py # Générateur de codes de récupération
│ │ ├── otp.py # Générateur OTP
│ │ ├── pattern.py # Générateur de motifs
│ │ └── phonetic.py # Générateur phonétique OTAN
│ ├── security/
│ │ ├── entropy.py # Calculateur d'entropie
│ │ ├── strength_checker.py # Intégration zxcvbn
│ │ └── vault.py # Chiffrement sécurisé de l'historique
│ ├── output/
│ │ ├── formatter.py # Sortie colorée
│ │ ├── logger.py # Journalisation de l'historique
│ │ ├── clipboard.py # Gestion sécurisée du presse-papiers
│ │ └── qrcode_gen.py # Génération de codes QR pour OTP
│ ├── config/
│ │ ├── loader.py # Chargeur de configuration YAML/JSON
│ │ └── presets.py # Profils de sécurité prédéfinis
├── data/
│ └── wordlists/ # Listes de mots thématiques (animals.txt, biology.txt, etc.)
└── tests/
Tests
# Exécuter tous les tests
python -m pytest tests/ -v
# Exécuter une classe de test spécifique
python -m pytest tests/test_generators.py::TestRandomPasswordGenerator -v
# Exécuter avec couverture
python -m pytest tests/ --cov=src --cov-report=html
Les 53 tests unitaires couvrent :
- Les 15 modes de générateur spécialisés
- Les calculateurs d'entropie et de robustesse zxcvbn
- L'effacement automatique du presse-papiers et le stockage sécurisé
- La logique de génération de codes QR ASCII
- Le chargement de la configuration et les profils prédéfinis
Configuration
PassForge prend en charge les fichiers de configuration au format YAML ou JSON.
Emplacements des fichiers de configuration (recherchés dans l'ordre) :
./passforge.yaml ou ./passforge.json
./.passforge.yaml ou ./.passforge.json
~/.passforge/config.yaml ou ~/.passforge/config.json
Exemple de configuration
{
"random": {
"length": 20,
"easy_read": true
},
"passphrase": {
"words": 5,
"capitalize": true
},
"output": {
"show_entropy": true
}
}
Voir passforge.example.json pour toutes les options disponibles.
Construction d'un exécutable autonome
PassForge peut être compilé en un seul exécutable autonome en utilisant PyInstaller.
Windows
# En utilisant le script de construction
passforge_build.bat
# Ou manuellement
pip install pyinstaller
pyinstaller --onefile --name passforge --console main.py
Linux/macOS
# En utilisant le script de construction
chmod +x passforge_build.sh
./passforge_build.sh
# Ou manuellement
pip install pyinstaller
pyinstaller --onefile --name passforge --console main.py
L'exécutable sera créé dans le dossier dist/ (~7 Mo, zéro dépendance).
🌐 PassForge Web (Module complémentaire PWA)
PassForge inclut désormais une interface Web moderne et réactive (PWA) qui offre un moyen visuel de générer et gérer les mots de passe tout en maintenant une parité complète avec la version CLI.
Principales fonctionnalités
- Interface latérale : Navigation facile entre tous les types de générateurs.
- Curseurs visuels : Ajustez les longueurs et le nombre de mots avec des curseurs interactifs.
- Support QR : Génération instantanée de codes QR pour partager des mots de passe ou des secrets OTP.
- Mode sombre/clair : Esthétique premium avec changement de thème adapté au système.
- Installable : Prise en charge de l'installation PWA sur Windows, Linux et mobile.
- Historique partagé : Utilise le même fichier de journal chiffré que la CLI.
Lancement de la PWA
Pour démarrer l'interface Web, exécutez le script de lancement pour votre système d'exploitation :
- Windows :
passforge_pwa.bat
- Linux/macOS :
passforge_pwa.sh
[!IMPORTANT]
Durcissement de la sécurité (v34+) : La PWA utilise désormais un gestionnaire SecureStaticFiles qui bloque explicitement l'accès du navigateur aux fichiers sources Python, aux journaux et aux clés cryptographiques. L'accès à l'historique est protégé via une poignée de main de clé API interne. La logique frontend inclut également des wrappers défensifs pour les actifs CDN externes afin de garantir la fonctionnalité même si un CDN est bloqué.
[!TIP]
Disponibilité de la construction : Les fichiers PWA sont inclus dans les distributions Code source et ZIP/Tarball. La PWA n'est pas intégrée dans le binaire .exe mono-fichier.
Le lanceur installera automatiquement les dépendances nécessaires (fastapi, uvicorn), démarrera un serveur local à http://127.0.0.1:8093 et ouvrira votre navigateur.
Licence
Licence GPL v3 - voir LICENSE pour les détails.
Contribution
Les contributions sont les bienvenues ! Veuillez lire nos directives de contribution avant de soumettre des PR.