弱密码校验工具类
通过检查密码是否符合某些安全策略来判断其强度
● 密码长度
● 字符类型
● 常见密码组合
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class WeakPasswordCheckUtil {
// 常见弱密码列表(可根据需求扩展)
private static final Set<String> COMMON_WEAK_PASSWORDS = new HashSet<>(Arrays.asList(
"password", "123456", "12345678", "123456789", "qwerty",
"abc123", "111111", "admin", "letmein", "welcome"
));
/**
* 检查密码是否为弱密码
*
* @param password 待检查的密码
* @return true-弱密码,false-安全密码
*/
public static boolean isWeakPassword(String password) {
// 检查空密码
if (password == null || password.isEmpty()) {
return true;
}
// 转换为小写统一检查(弱密码不区分大小写)
String lowerCasePwd = password.toLowerCase();
// 常见弱密码检查
if (COMMON_WEAK_PASSWORDS.contains(lowerCasePwd)) {
return true;
}
// 密码长度检查(至少8位)
if (password.length() < 8) {
return true;
}
// 字符复杂度检查(至少包含三种字符类型)
if (!checkComplexity(password)) {
return true;
}
// 连续或重复字符检查
if (hasRepeatingChars(password) || hasSequentialChars(password)) {
return true;
}
return false;
}
// 检查密码复杂度(大小写字母、数字、特殊符号至少包含三种)
private static boolean checkComplexity(String password) {
boolean hasLower = false, hasUpper = false;
boolean hasDigit = false, hasSpecial = false;
for (char c : password.toCharArray()) {
if (Character.isLowerCase(c)) {
hasLower = true;
} else if (Character.isUpperCase(c)) {
hasUpper = true;
} else if (Character.isDigit(c)) {
hasDigit = true;
} else {
hasSpecial = true;
}
}
int typeCount = 0;
if (hasLower) typeCount++;
if (hasUpper) typeCount++;
if (hasDigit) typeCount++;
if (hasSpecial) typeCount++;
return typeCount >= 3;
}
// 检查连续三个重复字符(如aaa)
private static boolean hasRepeatingChars(String password) {
for (int i = 0; i < password.length() - 2; i++) {
if (password.charAt(i) == password.charAt(i + 1) &&
password.charAt(i) == password.charAt(i + 2)) {
return true;
}
}
return false;
}
// 检查连续三个递增/递减字符(如abc或321)
private static boolean hasSequentialChars(String password) {
for (int i = 0; i < password.length() - 2; i++) {
int c1 = password.charAt(i);
int c2 = password.charAt(i + 1);
int c3 = password.charAt(i + 2);
// 递增检查(如123)
if (c2 == c1 + 1 && c3 == c2 + 1) {
return true;
}
// 递减检查(如321)
if (c2 == c1 - 1 && c3 == c2 - 1) {
return true;
}
}
return false;
}
}