java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java 登录密码强度校验

Java实现登录密码强度校验的项目实践

作者:道小生

本文主要介绍了Java实现登录密码强度校验的项目实践,包括使用正则表达式匹配校验和密码强度校验工具类这两种方法,具有一定的参考价值,感兴趣的可以了解一下

方式1:使用正则表达式匹配校验

private static final String PWD_REGEX = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*()=_+;':,.?]).{8,}$";
private static final String PWD_REGEX = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*()=_+;':,.?]).{8,32}$";
private static final String PWD_REGEX = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$";

可以根据自己的使用需求,自己组合

public class CheckPwdUtil {

    /**
     * 密码必须包含大写、小写、数字和特殊字符,且长度是8位以上
     */
    private static final String PWD_REGEX = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*()=_+;':,.?]).{8,}$";

    /**
     * 密码复杂度校验
     * @param password 密码
     * @return 校验密码强度是否合格 true/false
     */
    public static boolean isStrongPassword(String password) {
        if (StringUtils.isBlank(password)) {
            return false;
        }
        return password.matches(PWD_REGEX);
    }
}

方式2:密码强度校验工具类

public class CheckPwdUtil {

    private CheckPwdUtil(){}

    /**
     * 密码等级枚举
     * 这里可以根据实际业务需求,扩展更多等级
     * 例如:EASY, MIDIUM, STRONG, VERY_STRONG等
     */
    public enum PASSWD_LEVEL {
        EASY, STRONG
    }

    /**
     * NUM 数字
     * SMALL_LETTER 小写字母
     * CAPITAL_LETTER 大写字母
     * OTHER_CHAR 特殊字符
     */
    private static final int NUM = 1;
    private static final int SMALL_LETTER = 2;
    private static final int CAPITAL_LETTER = 3;
    private static final int OTHER_CHAR = 4;

    /**
     * 获得密码强度等级,包括EASY、STRONG
     * @param passwd 密码
     * @return 密码等级枚举
     */
    public static PASSWD_LEVEL getPasswordLevel(String passwd) {
        int level = check(passwd);
        /**
	     * 这里可以根据业务需求,判断不同的level来区分多级密码强度
	     * 例如:
	     * level <= 2 为EASY
	     * 2 < level < 5 为MIDIUM
	     * level > 5 为STRONG
	     * level > 5 为VERY_STRONG
	     */
        if (level < 5) {
            return CheckPwdUtil.PASSWD_LEVEL.EASY;
        } else {
            return CheckPwdUtil.PASSWD_LEVEL.STRONG;
        }
    }

    /**
     * 检查密码的强度
     *
     * @param passwd 密码
     * @return 密码等级
     */
    private static int check(String passwd) {
        if (null == passwd) {
            throw new IllegalArgumentException("密码为空");
        }
        int level = 0;
        // 增加点
        //判断密码长度是否大于等于8 是level++
        int len = passwd.length();
        if (len >= 8) {
            level++;
        }
        //判断密码是否含有数字 有level++
        if (countLetter(passwd, NUM) > 0) {
            level++;
        }
        //判断密码是否含有小写字母 有level++
        if (countLetter(passwd, SMALL_LETTER) > 0) {
            level++;
        }
        //判断密码是否还有大写字母 有level++
        if (countLetter(passwd, CAPITAL_LETTER) > 0) {
            level++;
        }
        //判断密码是否还有特殊字符 有level++
        if (countLetter(passwd, OTHER_CHAR) > 0) {
            level++;
        }

        return level;
    }

    /**
     * 计算密码中指定字符类型的数量
     *
     * @param passwd 密码
     * @param type 类型
     * @return 数量
     */
    private static int countLetter(String passwd, int type) {
        int count = 0;
        if (null != passwd && !passwd.isEmpty()) {
            for (char c : passwd.toCharArray()) {
                if (checkCharacterType(c) == type) {
                    count++;
                }
            }
        }
        return count;
    }

    /**
     *检查字符类型,包括num、大写字母、小写字母和其他字符。
     *
     * @param c – 字符
     * @return 类型
     */
    private static int checkCharacterType(char c) {
        if (c >= 48 && c <= 57) {
            return NUM;
        }
        if (c >= 65 && c <= 90) {
            return CAPITAL_LETTER;
        }
        if (c >= 97 && c <= 122) {
            return SMALL_LETTER;
        }
        return OTHER_CHAR;
    }
}
/**
 * 账号注册
 *
 * @param param 注册账号信息
 * @return 接口统一返回
 */
public Result signIn(Param param) {
	// 其他逻辑
	......
	
	if (CheckPwdUtil.PASSWD_LEVEL.EASY.equals(CheckPwdUtil.getPasswordLevel(param.getPassword()))) {
        return new Err<>("密码必须包含大写字母、小写字母、数字和特殊字符,且长度是8位以上");
    }
    
	// 其他逻辑
	......
}

以上两种方式都可实现密码强度校验,可根据自身业务需要选择使用。

到此这篇关于Java实现登录密码强度校验的项目实践的文章就介绍到这了,更多相关Java 登录密码强度校验内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文