最近因为在做WEB产品中接触到密码强度设置问题,找了不少解决方案,大多都是基于google提出的以密码长度、英文大小写以及符号组合来区分的方式进行。但是这样组合出来的密码形式还是有很大的问题。经过搜集整理后,总结出以下几种方式来处理关于密码强度设定的规则供大家参考。
密码强度,指一个密码对抗猜测或是暴力破解的有效程度。一般来说,指一个未授权的访问者得到正确密码的平均尝试次数。密码的强度和其长度、复杂度及不可预测度有关。强密码可以降低安全漏洞的整体风险,但并不能降低采取其他安全措施的需要。
攻击者可以提交猜测到的密码的速率是衡量一个系统安全性的重要因素。有的系统在多次尝试失败后会暂停登入一段时间,在没有其他安全缺陷时,这种系统可以用相对简单的密码保护。但是系统必须以某种形式存储用户密码,而当这些数据被盗时,就有极大的危险。(via.百度百科)
一、简易版密码强度规则
密码含有符号;
含有字母大小写。
规则:
符合2项以上允许注册。
不符合针对项目进行针对性提示。
二、常规版密码强度规则
一、密码长度:5 分: 小于等于 4 个字符
10 分: 5 到 7 字符– 25 分: 大于等于 8 个字符
二、字母:
0 分: 没有字母
三、数字:
0分: 没有数字
10分: 1 个数字
20分: 大于等于 3个数字
四、符号:
0分: 没有符号
10分: 1个符号
25分: 大于1个符号
五、奖励:
2分: 字母和数字
3分: 字母、数字和符号
5分: 大小写字母、数字和符号
规则:
>= 90: 非常安全
>= 80: 安全(Secure)
>= 70: 非常强
>= 60: 强(Strong)
>= 50: 一般(Average)
>= 25: 弱(Weak)
>= 0: 非常弱
三、专业版密码强度规则
符合密码基本规则者为70分。
+(总字元数-8) × 4
+(字母字元数-大写字母字元数) × (字母字元数-小写字母字元数) × 2
-(接连重复(Repeat)字元数) × 2
-(接连(Consecutive)数字字元数-3) × 1
-(接连(Consecutive)字母字元数-3) × 1
-(3码以上的连续(sequential)数字) × 3
-(3码以上的连续(sequential)字母) × 3
规则:
总分低於60者为弱(weak),高
于80者(含)为强(strong),介於兩者之间为中等(medium)。
四、骨灰版密码强度规则
分数区间:
60>x>0:未达标准
70>x≥60:警告
80>x≥70:已达标准
x≥80:优秀(100为上限)
符号说明:
Flat:均一的 加/扣分 比例。
Incr:出现次数越多,加/扣分 比例越大。
Cond:根据增加的字元数调整 加/扣分 比例。
n:出现次数。
len:密码字串长度。
积分说明:
增加字符的变化能提高分数。
最后的分数为加分项目和减分项目的总和。
分数的范围为0~100分。
分数不需达到最低字元即可计算。
规则说明:
密码最低要求8字元
最少符合下列4项中3项规则:- 大写英文字元- 小写英文字元- 数字字元- 符号字元
加分项目
密码字数/Flat/+(n*4)
大写英文字母/Cond或Incr/+((len-n)*2)
小写英文字母/Cond或Incr/+((len-n)*2)
数字字元/Cond/+(n*4)
符号字元/Flat/+(n*6)
密码中间穿插数字或符号字元/Flat/+(n*2)
已达到密码最低要求项目/Flat/+(n*2)
扣分项目
只有英文字元/Flat/-n
只有数字字元/Flat/-n
重复字元(Case Insensitive)/Incr/-(n(n-1))
连续英文大写字元/Flat/-(n*2)
连续英文小写字元/Flat/-(n*2)
连续数字字元/Flat/-(n*2)
连续字母超过三个(如abc, def)/Flat/-(n*3)
连续数字超过三个(如123,234)/Flat/-(n*3)
示例:
密码:Aa123 分数:43分 强度:未达标准
密码:Aa12L3 分数:64分 强度:警告
五、HACK版密码强度规则
说明:不在彩虹表中的密码强度较高(彩虹表就是一个庞大的、针对各种可能的字母组合预先计算好的哈希值的集合,不一定是针对MD5算法的,各种算法的都有,有了它可以快速的破解各类密码。)