java利用正则表达式弱密码检测

为了提高密码的复杂性和安全性,应用系统在设置密码的时候,一般都会进行弱密码检测。总体上有两种思路,把弱密码都记录下来,形成弱密码库,设置密码的时候检查是否与弱密码库匹配,这种方法存在两个方面的难点,一个是弱密码库的完整性比较难保证,另一个是弱密码库的数据量可能会很大,所以,建议的方式是采用定义规则的方式。

package com.ftsafe.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class WeakPasswordUtils {

	public static boolean isWeakPassword(String password) {

        // 字符长度8 - 16字符
		// 2个及以上大写字母
		// 2个及以上小写字母
		// 1个及以上特殊字符
		// 3个及以上数字字符

		// 需要满足的基本规则
		String baseReg = "^(?=.*[A-Z].*[A-Z])(?=.*[!@#$&*])(?=.*[0-9].*[0-9].*[0-9])(?=.*[a-z].*[a-z]).{8,16}$";

		boolean matchBaseReg = password.matches(baseReg);

		// 不满足要求,认为是弱密码
		if (matchBaseReg == false) {
			return true;
		}

		// 需要满足的特征
		String pattern1 = "([0-9a-zA-Z])\\1{2}";

		String pattern2 = "(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){2}";

		String pattern3 = "(?:9(?=8)|8(?=7)|7(?=6)|6(?=5)|5(?=4)|4(?=3)|3(?=2)|2(?=1)|1(?=0)){2}";

		boolean weakPassword = isMatchWeakPassword(password, pattern1);
		if (weakPassword) {
			return true;
		}

		weakPassword = isMatchWeakPassword(password, pattern2);
		if (weakPassword) {
			return true;
		}

		weakPassword = isMatchWeakPassword(password, pattern3);
		if (weakPassword) {
			return true;
		}

		return false;

	}

	public static boolean isMatchWeakPassword(String password, String patternStr) {

		// 创建 Pattern 对象
		Pattern pattern = Pattern.compile(patternStr);

		// 现在创建 matcher 对象
		Matcher matcher = pattern.matcher(password);

		// 找到弱密码特征
		if (matcher.find()) {
			return true;
		} else {
			return false;
		}

	}

	public static void main(String[] args) {

		System.out.println(isWeakPassword("$13AA11aa"));

		System.out.println(isWeakPassword("$1234"));

	}

}

可以通过执行main方法,判断指定的密码是否符合规则。 

2. 检测方法

boolean weakPassword = WeakPasswordUtils.isWeakPassword(password);

if (weakPassword == true) {
	return error("当前密码为弱密码,请重新设置安全密码!");
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值