@@ -29,13 +29,13 @@ public class PasswdStrength {
* 简单密码字典
*/
private final static String [ ] DICTIONARY = { " password " , " abc123 " , " iloveyou " , " adobe123 " , " 123123 " , " sunshine " ,
" 1314520 " , " a1b2c3 " , " 123qwe " , " aaa111 " , " qweasd " , " admin " , " passwd " } ;
" 1314520 " , " a1b2c3 " , " 123qwe " , " aaa111 " , " qweasd " , " admin " , " passwd " } ;
/**
* 数字长度
*/
private final static int [ ] SIZE_TABLE = { 9 , 99 , 999 , 9999 , 99999 , 999999 , 9999999 , 99999999 , 999999999 ,
Integer . MAX_VALUE } ;
Integer . MAX_VALUE } ;
/**
* 检查密码的健壮性
@@ -65,48 +65,48 @@ public class PasswdStrength {
}
if ( len > 4 & & countLetter ( passwd , CHAR_TYPE . NUM ) > 0 & & countLetter ( passwd , CHAR_TYPE . SMALL_LETTER ) > 0
| | countLetter ( passwd , CHAR_TYPE . NUM ) > 0 & & countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > 0
| | countLetter ( passwd , CHAR_TYPE . NUM ) > 0 & & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > 0
| | countLetter ( passwd , CHAR_TYPE . SMALL_LETTER ) > 0 & & countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > 0
| | countLetter ( passwd , CHAR_TYPE . SMALL_LETTER ) > 0 & & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > 0
| | countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > 0 & & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > 0 ) {
| | countLetter ( passwd , CHAR_TYPE . NUM ) > 0 & & countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > 0
| | countLetter ( passwd , CHAR_TYPE . NUM ) > 0 & & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > 0
| | countLetter ( passwd , CHAR_TYPE . SMALL_LETTER ) > 0 & & countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > 0
| | countLetter ( passwd , CHAR_TYPE . SMALL_LETTER ) > 0 & & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > 0
| | countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > 0 & & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > 0 ) {
level + + ;
}
if ( len > 6 & & countLetter ( passwd , CHAR_TYPE . NUM ) > 0 & & countLetter ( passwd , CHAR_TYPE . SMALL_LETTER ) > 0
& & countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > 0 | | countLetter ( passwd , CHAR_TYPE . NUM ) > 0
& & countLetter ( passwd , CHAR_TYPE . SMALL_LETTER ) > 0 & & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > 0
| | countLetter ( passwd , CHAR_TYPE . NUM ) > 0 & & countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > 0
& & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > 0 | | countLetter ( passwd , CHAR_TYPE . SMALL_LETTER ) > 0
& & countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > 0 & & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > 0 ) {
& & countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > 0 | | countLetter ( passwd , CHAR_TYPE . NUM ) > 0
& & countLetter ( passwd , CHAR_TYPE . SMALL_LETTER ) > 0 & & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > 0
| | countLetter ( passwd , CHAR_TYPE . NUM ) > 0 & & countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > 0
& & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > 0 | | countLetter ( passwd , CHAR_TYPE . SMALL_LETTER ) > 0
& & countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > 0 & & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > 0 ) {
level + + ;
}
if ( len > 8 & & countLetter ( passwd , CHAR_TYPE . NUM ) > 0 & & countLetter ( passwd , CHAR_TYPE . SMALL_LETTER ) > 0
& & countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > 0 & & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > 0 ) {
& & countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > 0 & & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > 0 ) {
level + + ;
}
if ( len > 6 & & countLetter ( passwd , CHAR_TYPE . NUM ) > = 3 & & countLetter ( passwd , CHAR_TYPE . SMALL_LETTER ) > = 3
| | countLetter ( passwd , CHAR_TYPE . NUM ) > = 3 & & countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > = 3
| | countLetter ( passwd , CHAR_TYPE . NUM ) > = 3 & & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > = 2
| | countLetter ( passwd , CHAR_TYPE . SMALL_LETTER ) > = 3 & & countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > = 3
| | countLetter ( passwd , CHAR_TYPE . SMALL_LETTER ) > = 3 & & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > = 2
| | countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > = 3 & & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > = 2 ) {
| | countLetter ( passwd , CHAR_TYPE . NUM ) > = 3 & & countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > = 3
| | countLetter ( passwd , CHAR_TYPE . NUM ) > = 3 & & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > = 2
| | countLetter ( passwd , CHAR_TYPE . SMALL_LETTER ) > = 3 & & countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > = 3
| | countLetter ( passwd , CHAR_TYPE . SMALL_LETTER ) > = 3 & & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > = 2
| | countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > = 3 & & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > = 2 ) {
level + + ;
}
if ( len > 8 & & countLetter ( passwd , CHAR_TYPE . NUM ) > = 2 & & countLetter ( passwd , CHAR_TYPE . SMALL_LETTER ) > = 2
& & countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > = 2 | | countLetter ( passwd , CHAR_TYPE . NUM ) > = 2
& & countLetter ( passwd , CHAR_TYPE . SMALL_LETTER ) > = 2 & & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > = 2
| | countLetter ( passwd , CHAR_TYPE . NUM ) > = 2 & & countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > = 2
& & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > = 2 | | countLetter ( passwd , CHAR_TYPE . SMALL_LETTER ) > = 2
& & countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > = 2 & & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > = 2 ) {
& & countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > = 2 | | countLetter ( passwd , CHAR_TYPE . NUM ) > = 2
& & countLetter ( passwd , CHAR_TYPE . SMALL_LETTER ) > = 2 & & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > = 2
| | countLetter ( passwd , CHAR_TYPE . NUM ) > = 2 & & countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > = 2
& & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > = 2 | | countLetter ( passwd , CHAR_TYPE . SMALL_LETTER ) > = 2
& & countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > = 2 & & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > = 2 ) {
level + + ;
}
if ( len > 10 & & countLetter ( passwd , CHAR_TYPE . NUM ) > = 2 & & countLetter ( passwd , CHAR_TYPE . SMALL_LETTER ) > = 2
& & countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > = 2 & & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > = 2 ) {
& & countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) > = 2 & & countLetter ( passwd , CHAR_TYPE . OTHER_CHAR ) > = 2 ) {
level + + ;
}
@@ -124,19 +124,21 @@ public class PasswdStrength {
}
}
// decrease points
if ( " abcdefghijklmnopqrstuvwxyz " . indexOf ( passwd ) > 0 | | " ABCDEFGHIJKLMNOPQRSTUVWXYZ " . indexOf ( passwd ) > 0 ) {
// 判断passwd是否为连续字母( a-z/A-Z) 的完整子串
if ( " abcdefghijklmnopqrstuvwxyz " . contains ( passwd ) | | " ABCDEFGHIJKLMNOPQRSTUVWXYZ " . contains ( passwd ) ) {
level - - ;
}
if ( " qwertyuiop " . indexOf ( passwd ) > 0 | | " asdfghjkl " . indexOf ( passwd ) > 0 | | " zxcvbnm " . indexOf ( passwd ) > 0 ) {
// 判断passwd是否为键盘连续序列的完整子串
if ( " qwertyuiop " . contains ( passwd ) | | " asdfghjkl " . contains ( passwd ) | | " zxcvbnm " . contains ( passwd ) ) {
level - - ;
}
if ( StrUtil . isNumeric ( passwd ) & & ( " 01234567890 " . indexOf ( passwd ) > 0 | | " 09876543210 " . indexOf ( passwd ) > 0 ) ) {
// 判断passwd是否为纯数字弱密码( 升序或降序) 的完整子串
if ( StrUtil . isNumeric ( passwd ) & & ( " 01234567890 " . contains ( passwd ) | | " 09876543210 " . contains ( passwd ) ) ) {
level - - ;
}
if ( countLetter ( passwd , CHAR_TYPE . NUM ) = = len | | countLetter ( passwd , CHAR_TYPE . SMALL_LETTER ) = = len
| | countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) = = len ) {
| | countLetter ( passwd , CHAR_TYPE . CAPITAL_LETTER ) = = len ) {
level - - ;
}
@@ -172,6 +174,7 @@ public class PasswdStrength {
}
}
// 检测密码是否为简单密码字典中的弱密码或包含字典弱密码片段
for ( String s : DICTIONARY ) {
if ( passwd . equals ( s ) | | s . contains ( passwd ) ) {
level - - ;
@@ -201,7 +204,7 @@ public class PasswdStrength {
}
/**
* Get password strength level, includes easy, mi dium, strong, very strong, extremely strong
* 获取密码强度等级, 包括 easy, me dium, strong, very strong, extremely strong
*
* @param passwd 密码
* @return 密码等级枚举
@@ -232,8 +235,7 @@ public class PasswdStrength {
}
/**
* Check character's type, includes num, capital letter, small letter and other character.
* 检查字符类型
* 检查字符类型,包括数字、大写字母、小写字母及其他字符
*
* @param c 字符
* @return 类型