Evaluer la qualité d'un mot de passe

Soyez le premier à donner votre avis sur cette source.

Vue 5 936 fois - Téléchargée 773 fois

Description

Ce code permet d'attribuer une note à un mot de passe. Cette note correspond au nombre d'itérations qu'il sera nécessaire d'effectuer pour trouver le mot de passe en utilisant une attaque par force brutale : essayer toutes les combinaisons.

Source / Exemple :


package fr.julien.evaluateur.metier;

/**
 * <b>Classe qui permet d'évaluer la qualité d'un mot de passe</b>
 * <p>
 * Le critère choisit pour cette évaluation est le nombre d'itérations nécéssaires
 * pour le casser grâce à une attaque bruteforce (essayer toutes les combinaisons
 * </p>
 * 
 * @author Julien
 * @version 1.0
 *
 */
public class Evaluateur implements IEvaluateur{

    /**
     * L'unique instance du singleton
     */
    private static final IEvaluateur instance = new Evaluateur();

    /**
     * La liste des caracteres spéciaux
     */
    private String CARACTERES_SPECIAUX = "&²~#{[(-|è\\_ç^à@)]°}=+$£¤**ù%!§:/.;?,<>";
    
    /**
     * Les lettres mnuscules
     */
    private String MINUSCULES = "azertyuiopqsdfghjklmwxcvbn";
    
    /**
     * Les lettres majuscules
     */
    private String MAJUSCULES = MINUSCULES.toUpperCase();
    
    /**
     * Les chiffres
     */
    private String CHIFFRES = "0123456789";
    
    /**
     * Les marges définissant les notes à partir de la qualite
     */
    private int[] marges = new int[]{0, 20, 40, 60, 80, 100, 120, 140, 160, 180};

    /**
     * Constructeur prive du singleton
     */
    private Evaluateur() {
        super();
    }

    /**
     * Fonction qui permet de noter un mot de passe sur la base du nombre
     * d'itérations nécéssaires pour le casser avec une attaque bruteforce
     * @param mp
     *     le mot de passe a noter
     * @return la note associée
     */
    public int noter(String mp){
        double qualite = estimerQualite(mp.length(), nombreCaracteresAtester(mp));
        int res=10;
        for(int i=0; i<marges.length; i++){
            if(qualite<marges[i]){
                res=i;
                break;
            }
        }
        return res;
    }
    
    /**
     * Fonction qui permet de calculer le nombre d'operations nécéssaires
     * pour une attaque par bruteforce. On utilse le log de ce résultat pour
     * éviter le dépassement de capacité des variables
     * @param taille
     *     la taille du mot de passe
     * @param nbTest
     *     le nombre de caracteres a tester
     * @return
     */
    private double estimerQualite(int taille, int nbTest){
        return nbTest*Math.log(taille);
    }

    /**
     * Fonction qui permet de déterminer le nombre de caracteres à tester
     * lors d'une attaque bruteforce
     * @param mp
     *     le mot de passe
     * @return le nombre de caracteres a tester lors de l'attaque
     */
    private int nombreCaracteresAtester(String mp){
        boolean[] contient = new boolean[]{false, false, false, false};
        int res=0;
        for(int i=0; i<mp.length(); i++){
            if(CHIFFRES.contains(mp.charAt(i)+"")){
                if(!contient[0]){
                    contient[0]=true;
                    res+=CHIFFRES.length();
                }
            }
            if(MINUSCULES.contains(mp.charAt(i)+"")){
                if(!contient[1]){
                    contient[1]=true;
                    res+=MINUSCULES.length();
                }
            }
            if(MAJUSCULES.contains(mp.charAt(i)+"")){
                if(!contient[2]){
                    contient[2]=true;
                    res+=MAJUSCULES.length();
                }
            }
            if(CARACTERES_SPECIAUX.contains(mp.charAt(i)+"")){
                if(!contient[3]){
                    contient[3]=true;
                    res+=CARACTERES_SPECIAUX.length();
                }
            }
        }
        return res;
    }

    /**
     * L'accesseur a l'instance du singleton
     * @return l'instance de l'evaluateur
     */
    public static IEvaluateur getInstance() {
        return instance;
    }

}

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
286
Bonjour,

Oui, c'est vrai, il manque beaucoup de caractères spéciaux, presque tous les caractères accentués de base.

Merci de me l'avoir fait remarquer.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
manque le é... entre autres, surement

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.