Mise bout à bout
Nous avons maintenant tous les composants nécessaires pour pouvoir vérifier si nos mots de passe sont identiques à des mots de passe retrouvés dans des fuites de données.
- Écrivez une fonction publique
hibp::check_accounts()
prenant des comptes en paramètre et renvoyant une liste de comptes et du nombre d'occurrences où les mots de passe associés ont été trouvés dans des fuites de données. Cette liste devra être ordonnée du plus fréquent au moins fréquent.
pub fn check_accounts(accounts: &[Account]) -> Result<Vec<(&Account, u64)>, Error> {
todo!()
}
Cette fonction utilisera tout d'abord hibp::sha1_by_prefix()
pour regrouper les comptes par préfixe de SHA-1. Elle invoquera ensuite hibp::get_suffixes()
sur chaque préfixe pour récupérer les suffixes associés, éventuellement de manière parallèle. S'il n'y a pas eu d'erreur dans cette phase, au sein de chaque préfixe, on pourra ajouter chaque compte au vecteur résultat en l'accompagnant du nombre d'occurrences ou de 0 si le suffixe du compte n'est pas présent.
Après avoir trié le vecteur résultat (à l'aide par exemple de la méthode sort_unstable_by_key()
), on pourra le renvoyer.
- Appelez la fonction
hibp::check_accounts()
depuis le programme principal au sein de la sous-commandehibp
.
Bravo ! Vous avez maintenant implémenté une suite complète de vérification d'une liste de comptes. N'hésitez pas à l'utiliser avec vos propres mots de passe si vous souhaitez les tester en masse, par exemple en les exportant de votre gestionnaire de mots de passe.
Note importante
Attention à ne pas surcharger l'API de Have I been pwned? par des requêtes trop nombreuses. Si vous avez récupéré le fichier accounts.txt donné en exemple, sélectionnez en un petit nombre d'entrées pour faire vos tests, par exemple les 100 premières :
$ head -n 100 accounts.txt > small.txt
Vous pouvez ensuite utiliser le fichier small.txt
comme fichier de test, ou en construire un autre à la main.