在注册或更改密码表单中,确保用户提供密码的最佳方法是什么?
我有一个想法(在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
VirtuosiMedi.. 17
根据语言,我通常使用正则表达式来检查它是否具有:
至少一个大写和一个小写字母
至少一个号码
至少有一个特殊字符
长度至少为六个字符
您可以要求以上所有,或使用强度计类型的脚本.对于我的力量计,如果密码长度合适,则评估如下:
满足一个条件:弱密码
满足两个条件:中密码
满足所有条件:强密码
您可以调整以上内容以满足您的需求.
根据语言,我通常使用正则表达式来检查它是否具有:
至少一个大写和一个小写字母
至少一个号码
至少有一个特殊字符
长度至少为六个字符
您可以要求以上所有,或使用强度计类型的脚本.对于我的力量计,如果密码长度合适,则评估如下:
满足一个条件:弱密码
满足两个条件:中密码
满足所有条件:强密码
您可以调整以上内容以满足您的需求.
面向对象的方法是一组规则.为每个规则分配权重并迭代它们.在伪代码中:
abstract class Rule { float weight; float calculateScore( string password ); }
计算总分:
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; }
一个示例规则算法,基于存在的字符类数量:
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; }