弱口令验证方案设计
1.1??? 弱口令设计思路1.1.1??? 基本校验
弱口令的基本校验包括:口令字符串长度校验、口令字符串包含的字符类型校验、口令字符串包含的不同字符数校验。
口令字符串长度校验:验证口令字符串的长度不能低于规定值(如6)。
口令字符串包含的字符类型校验:把字符类型分为大写字母、小写字母、数组、特殊字符四类,校验口令字符串包含的字符类型不能低于规定值(如2)。
口令字符串包含的不同字符数校验:不区分大、小写时a与A算同一字符,区分大、小写时a与A为不同字符。校验口令字符串中包含的不同字符数不能低于规定值(如4)。
1.1.2??? 高级校验
弱口令的高级校验包括:连续字符校验、键盘输入规则校验、弱口令字典校验。
连续字符校验:校验口令字符串中连续字符组成的子串长度不但能高于规定的值(如40%)。
键盘输入规则校验:详细见2.1.3
弱口令字典校验:在弱口令字典中校验该口令字符串是否为弱口令。
1.1.3??? 键盘输入规则校验
结合笔记本电脑和台式电脑键盘的布局规则,将字符输入键映射为4*10的二维数组矩阵(1-0,q-p,a-;,z-?),把密码字符串中每各字符格式化为键盘矩阵中对应的坐标,判断连续字符的坐标是否相邻,并记录连续相邻的串长度进行安全性评估
1.2??? 我的弱口令校验工具1.2.1? 详细验证步骤说明
1:判断密码是否为null或空,如果不是进入下一步,否则返回结果(密码安全性不符合)
2:判断密码字符串长度是否符合要求,默认是大于等于6位,如果是进入下一步,否则返回结果(密码安全性不符合)
3:循环取出密码串中从0位置到长度下限++的子串,进行下面4到8的操作并记录结果到一个double[]中
4:评估密码中包含的字符类型是否符合要求,如果低于下限返回0,否则返回6-10的double
5:评估密码至少包含的不同字符数(不区分大、小写),返回int,如果字符数小于下限返回0,否则返回6-10的double
6:评估密码字符串是否包含a-z,z-a这样的连续字符,返回一个double,如果连续字符占整个串长度的40%以上返回0,否则返回(1-连续字符占整个串长度的百分比) * 10
7:评估密码字符串是否匹配键盘输入习惯,返回0-10的整数,值越大表示越不符合键盘输入习惯
8:根据3、4、5、6的评估结果综合评估出密码的安全评估值(0-10的double)
9:循环3中double[]的值,如果全是0返回0,否则从第一个不是0的位置开始累加,如果后一个位置为0则加长度修正值1,如果累加结果大于10,循环结束返回10
10:判断7产生的安全评估值是否大于安全评估值的下限(默认7),是返回true,否则返回false