Exemple de solution

use rand::{thread_rng, Rng};
use rand::distributions::Alphanumeric;
use std::io;

fn main() {
    println!("Bienvenue dans le générateur de mot de passe.");
    println!("Entrez la longueur souhaitée pour le mot de passe (minimum 6) :");

    // Lire la longueur souhaitée
    let longueur = loop {
        let mut input = String::new();
        io::stdin()
            .read_line(&mut input)
            .expect("Erreur lors de la lecture.");

        match input.trim().parse::<usize>() {
            Ok(value) if value >= 6 => break value,
            _ => println!("Veuillez entrer un nombre entier valide (minimum 6)."),
        }
    };

    // Générer le mot de passe
    let mot_de_passe = generer_mot_de_passe(longueur);

    // Afficher le mot de passe
    println!("Votre mot de passe généré est : {}", mot_de_passe);
}

fn generer_mot_de_passe(longueur: usize) -> String {
    // Ensemble de caractères utilisables
    let lettres_majuscules = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    let lettres_minuscules = "abcdefghijklmnopqrstuvwxyz";
    let chiffres = "0123456789";
    let symboles = "!@#$%^&*()";

    let mut ensemble = String::new();
    ensemble.push_str(lettres_majuscules);
    ensemble.push_str(lettres_minuscules);
    ensemble.push_str(chiffres);
    ensemble.push_str(symboles);

    let mut rng = thread_rng();
    let mot_de_passe: String = (0..longueur)
        .map(|_| {
            let idx = rng.gen_range(0..ensemble.len());
            ensemble.chars().nth(idx).unwrap()
        })
        .collect();

    mot_de_passe
}

Explication du code

  1. Lecture de l'entrée utilisateur

  2. Ensemble de caractères

  3. Génération du mot de passe

  4. Affichage

Améliorations possibles

  1. Personnalisation : Ajoutez des options pour inclure/exclure certains types de caractères (par ex. pas de symboles).

  2. Équilibre des caractères : Assurez-vous qu'il y ait au moins une lettre, un chiffre et un symbole.

  3. Options avancées : Proposez différents niveaux de complexité pour le mot de passe.

  4. Sauvegarde sécurisée : Permettez d'enregistrer le mot de passe généré dans un fichier chiffré.

Cet exercice est parfait pour pratiquer l'utilisation de bibliothèques externes, les générateurs aléatoires, et les chaînes de caractères ! 😊