Besoin d'un avis, générateur de mot de passe
Fermé
Jo
-
Modifié par cptpingu le 25/04/2016 à 12:19
cptpingu Messages postés 3840 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 23 août 2024 - 28 avril 2016 à 13:54
cptpingu Messages postés 3840 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 23 août 2024 - 28 avril 2016 à 13:54
A voir également:
- Besoin d'un avis, générateur de mot de passe
- Generateur mot de passe - Télécharger - Sécurité
- Voir mot de passe wifi android - Guide
- Trousseau mot de passe iphone - Guide
- Mot de passe - Guide
- Mot de passe administrateur - Guide
1 réponse
cptpingu
Messages postés
3840
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
23 août 2024
2
Modifié par cptpingu le 25/04/2016 à 12:28
Modifié par cptpingu le 25/04/2016 à 12:28
Bonjour.
Tout d'abord, quelques conseils:
Au niveau de la technique:
Je te propose ma version (un peu plus courte que la tienne :p):
On pourrait en faire encore un peu plus pour rendre le programme plus facile à améliorer, mais je ne veux pas trop complexifier le code.
Tout d'abord, quelques conseils:
- Évite les using namespace, c'est crade et dangereux, voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace/
- Préfère 0 à NULL (ou nullptr si tu as accès au C++11).
- Plutôt que de faire plein de std::cout, tu peux en écrire un seul, dont tu chaînes les actions.
- Si tu a accès au C++11, évite srand/rand, au profit d'un "std::random_device" bien plus fiable.
Au niveau de la technique:
- Quand tu vois qu'une action est répétée X fois dans ton programme à l'identique, c'est que tu peux la "factoriser". Pas besoin de demander la longueur dans chaque cas. Tu demandes la longueur avant d'appliquer le choix avec ton switch.
- Plutôt que d'écrire chacun des choix avec un switch, tu peux mettre chacun de tes groupes de mots de passe dans un tableau. Ainsi, tu n'as qu'à choisir un élément du tableau pour choisir un groupe. Ça te prend moins de place qu'un switch et c'est plus facile d'ajouter de nouveaux groupes.
Je te propose ma version (un peu plus courte que la tienne :p):
#include <iostream> #include <string> #include <ctime> #include <cstdlib> namespace // namespace anonyme, si tu n'es pas à l'aise avec, ignore cette directive { const std::string passwords[] = // constante globale. Une variable globale c'est ultra dégueux, mais une constante c'est parfaitement propre. Le [] veut dire que la taille s'adapte automatiquement. { "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", "0123456789", "abcdefghijklmnopqrstuvwxyz0123456789", "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" }; } // namespace int main() { srand(time(0)); std::cout << "===== Generateur de mot de passe =====\n" "1. lowercase\n" "2. uppercase\n" "3. lower_uppercase\n" "4. numeric\n" "5. lower_numeric\n" "6. upper_numeric\n" "7. lower_upper_numeric\n" << std::endl; int choix = 0; std::cin >> choix; if (choix < 1 || choix > 7) { std::cerr << "Choix invalide: " << choix << std::endl; return 1; } int longueur = 0; std::cout << "Quelle longueur de password: "; std::cin >> longueur; for (int i = 0; i < longueur; ++i) { const int aleatoire = rand() % passwords[choix - 1].size(); std::cout << passwords[choix - 1][aleatoire]; } std::cout << std::endl; return 0; }
On pourrait en faire encore un peu plus pour rendre le programme plus facile à améliorer, mais je ne veux pas trop complexifier le code.
25 avril 2016 à 14:34
En revanche pour le srand((time)NULL) j'avais cru comprendre que c'était un aléatoire plus au pif que si on met 0 (pour une raison de calcul de point de départ du random), je fouillerai l'idée en tout cas.
C'est vrai que mon code est un peu plus dans le style "gros sabot", j'ai pas mal de chose à apprendre
Merci à toi
Modifié par cptpingu le 25/04/2016 à 15:01
Si ça s'appelle std:: et non standard:: c'est qu'il y a une raison :). Ce n'est pas redondant, le C++ étant un langage contextuel, sur de gros code tu seras content de pouvoir différencier d'un seul coup d'oeil à qui appartient tel morceau de code. Exemple: std::string, boost::string, my::string => Tu vois immédiatemment quel type de string c'est. En revanche, si je te met "string" tout court, quelle implémentation utilises-tu (std ? boost ? my ? autre ?) ? Sur un gros code tu vas devoir chercher (parfois dans d'autres fichiers) quel est le type de string utilisé (et encore ce n'est qu'un exemple simple parmi d'autres). Le pire étant qu'un using namespace peu introduire des subtilités extrêmement difficile à débugger, même pour un expert (lis le lien que je t'ai filé). Bref, je te conseille très très vivement de ne pas utiliser cette directive, et de prendre les bonnes habitudes dès maintenant.
Rien à voir. En C++ NULL et 0 c'est exactement et strictement la même chose.
Quand tu écris NULL, le compilateur remplace par 0. La raison pour laquelle on n'utilise pas NULL en C++ est que l'on veut éviter certains petits "pièges" qui ne paraissent pas logique au premier abord. Dans les dernières versions de C++, le problème a été corrigé grâce au nouveau mot clé "nullptr". Pour comprendre le rapport entre 0 et NULL, voir: http://0217021.free.fr/portfolio/axel.berardino/articles/null-en-cpp/
time(0) (ou time(NULL), c'est pareil), veut dire: prendre le timestamp courant (en gros le chiffre représentant le nombre de secondes écoulées). "srand" veut un entier d'initialisation et on lui donne le temps courant ce qui augmente les chances que ce soit bien aléatoire. Essaie de faire un srand(1234) et tu verras que tu obtiendras toujours les mêmes résultats.
Néanmoins, si tu veux faire du C++ moderne et que ton compilateur le gère, srand et rand sont des vieilles fonctions à éviter, au profit de "std::random_device" qui est beaucoup plus fiable.
26 avril 2016 à 21:18
Par contre pas moyen de me débarasser du switch
p.s l'utilisation de cout << au final c'est comme en BASIC sur une calculette casio ! (je m'amusais bien à l'époque)
28 avril 2016 à 13:54
Exemple:
En t'aidant du code que j'ai posté, il devrait être aisé de s'en débarasser.