46 votes

Quel est le meilleur moyen de vérifier la force d'un mot de passe?

Voir aussi Comment calculez-vous la complexité du mot de passe?

Quel est le meilleur moyen de s'assurer qu'un mot de passe fourni par l'utilisateur est un mot de passe fort dans un formulaire d'inscription ou de changement de mot de passe?

EDIT: une idée que j'avais (en python)

 def validate_password(passwd):
    conditions_met = 0
    conditions_total = 3
    if len(passwd) >= 6: 
        if passwd.lower() != passwd: conditions_met += 1
        if len([x for x in passwd if x.isdigit()]) > 0: conditions_met += 1
        if len([x for x in passwd if not x.isalnum()]) > 0: conditions_met += 1
    result = False
    print conditions_met
    if conditions_met >= 2: result = True
    return result
 

16voto

VirtuosiMedia Points 11293

En fonction de la langue, j'ai l'habitude d'utiliser des expressions régulières pour vérifier si elle a:

  • Au moins une lettre majuscule, une lettre minuscule
  • Au moins un numéro de
  • Au moins un caractère spécial
  • D'une longueur d'au moins six caractères

Vous pouvez exiger de tous les ci-dessus, ou utiliser un mesureur type de script. Pour mon mètre, si le mot de passe a la bonne longueur, il est évalué comme suit:

  • Une seule condition: mot de passe faible
  • Deux conditions sont respectées: moyenne de mot de passe
  • Toutes les conditions sont respectées: mot de passe fort

Vous pouvez ajuster la ci-dessus pour répondre à vos besoins.

13voto

10voto

user9116 Points 472

L'approche orientée objet serait un ensemble de règles. Attribuez un poids à chaque règle et parcourez-la. En pseudo-code:

 abstract class Rule {

    float weight;

    float calculateScore( string password );

}
 

Calcul du score total:

 float getPasswordStrength( string password ) {     

    float totalWeight = 0.0f;
    float totalScore  = 0.0f;

    foreach ( rule in rules ) {

       totalWeight += weight;
       totalScore  += rule.calculateScore( password ) * rule.weight;

    }

    return (totalScore / totalWeight) / rules.count;

}
 

Un exemple d'algorithme de règle, basé sur le nombre de classes de caractères présentes:

 float calculateScore( string password ) {

    float score = 0.0f;

    // NUMBER_CLASS is a constant char array { '0', '1', '2', ... }
    if ( password.contains( NUMBER_CLASS ) )
        score += 1.0f;

    if ( password.contains( UPPERCASE_CLASS ) )
        score += 1.0f;

    if ( password.contains( LOWERCASE_CLASS ) )
        score += 1.0f;

    // Sub rule as private method
    if ( containsPunctuation( password ) )
        score += 1.0f;

    return score / 4.0f;

}
 

3voto

paperhorse Points 1412

S'ils ne se trompent pas au moins une fois par semaine, alors qu'ils essaient de se connecter, c'est trop faible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X