首页 > 其他分享 >验证密码的复杂度:密码规则为: 字母、数字、特殊符号,至少匹配2种

验证密码的复杂度:密码规则为: 字母、数字、特殊符号,至少匹配2种

时间:2023-08-16 17:22:20浏览次数:30  
标签:String 字母 复杂度 zA 密码 static 特殊符号 public

package com.guochuang.gov.dc.common.util;

import java.util.Scanner;
import java.util.regex.Pattern;

public class PasswordCheckUtil {

/**
* 假定设置密码时,密码规则为: 字母、数字、特殊符号,至少匹配2种
* 则密码可能出现的情况有:
* 1、数字+特殊符号
* 2、字母+特殊符号
* 3、字母+数字
* 4、字母+数字+特殊符号
* (组合与顺序无关)
* 解决思路:
* 1、遍历字符串的字符数组,查看是否包含目标特殊字符,若包含,则标记字符串
* 包含特殊字符,并替换当前特殊字符为''。
* 2、判断剩下的字符组成的字符串,是否匹配以下情况
* - 纯字母
* - 纯数字
* - 字母+数字
* 3、字符串匹配规则
* 纯字母+包含特殊字符 ---- 匹配通过
* 纯数字+包含特殊字符 ---- 匹配通过
* 字母+数字+包含个数字符 ---- 匹配通过
*/
//特殊字符
public static final String SPEC_CHARACTERS = " !\"#$%&'()*+,-./:;<=>?@\\]\\[^_`{|}~";
// 纯字母
public static final String character = "[a-zA-Z]{1,}$";
// 纯数字
public static final String numberic = "[0-9]{1,}$";
// 字母和数字
public static final String number_and_character = "((^[a-zA-Z]{1,}[0-9]{1,}[a-zA-Z0-9]*)+)" +
"|((^[0-9]{1,}[a-zA-Z]{1,}[a-zA-Z0-9]*)+)$";
// 字母或数字
public static final String number_or_character = "[a-zA-Z0-9]+$";
// 字母数字下划线
public static final String ncw = "\\w+$";

//字母、数字、特殊符号,至少匹配2种
public static final String regex = "^((?=.*[a-zA-Z])(?=.*[0-9])|(?=.*[0-9])(?=.*[^a-zA-Z0-9])|(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9])|(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[^a-zA-Z0-9])).*$";


/**
* 验证密码的复杂度
*
* @param targetString 要验证的密码
* @return 如果密码符合复杂度要求,返回true;否则返回false
*/
public static boolean checkPassword(String targetString) {
String opStr = targetString;
boolean isLegal = false;
boolean hasSpecChar = false;
char[] charArray = opStr.toCharArray();
for (char c : charArray) {
if (SPEC_CHARACTERS.contains(String.valueOf(c))) {
hasSpecChar = true;
// 替换此字符串
opStr = opStr.replace(c, ' ');
}
}
String excSpecCharStr = opStr.replace(" ", "");
boolean isPureNum = Pattern.compile(numberic).matcher(excSpecCharStr).matches();
boolean isPureChar = Pattern.compile(character).matcher(excSpecCharStr).matches();
boolean isNumAndChar = Pattern.compile(number_and_character).matcher(excSpecCharStr).matches();
isLegal = ((isPureNum && hasSpecChar)
|| (isPureChar && hasSpecChar) || isNumAndChar && hasSpecChar) || isNumAndChar;
return isLegal;
}


/**
* 验证密码的复杂度
*
* @param password 要验证的密码
* @return 如果密码符合复杂度要求,返回true;否则返回false
*/
public static boolean isPasswordComplex(String password) {
// 正则表达式,用于匹配至少包含两种不同类型的字符的密码
Pattern pattern = Pattern.compile(regex);
return pattern.matcher(password).matches();
}


public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

boolean isOk = false;

while (!isOk){
System.out.println("请输入密码:");

String password = scanner.nextLine(); // 替换为你要验证的密码

isOk = isPasswordComplex(password);

System.out.println(isOk);

}

scanner.close();
}
}

标签:String,字母,复杂度,zA,密码,static,特殊符号,public
From: https://www.cnblogs.com/yangjcBlog/p/17635699.html

相关文章

  • 海泰密码全能力 赋能业务全场景|2023年商密大会海泰方圆完美收官
    2023商用密码大会8月11日,为期三天的2023年商用密码大会圆满举办。作为密码界万众瞩目的一场盛会,此次商密大会吸引了300多家业内主流的密码厂商参展、四万多人次参观创历史新高。海泰方圆重磅亮相,全面展示了公司前沿技术、拳头产品、精品方案,充分展现了海泰方圆在百行百业数字化转型......
  • Mozilla Thunderbird如何设置开启密码
    很多人都使用MozillaThunderbird,包括我在内。邮件客户端的好处是,可以高效快捷的收取邮件和进行分类。但是如果开机后就直接能够浏览邮件的话,安全性方面会比较差。如果每次打开前需要密码验证的话,会好一点。还好MozillaThunderbird的插件StartupMaster提供了这样的功能。具体:菜......
  • 2023商用密码大会|海泰方圆发布密境新品牌及多款重磅产品
    8月10日,在北京商用密码行业协会展区-展中展活动上,海泰方圆重磅发布了数据安全品牌“密境”,并隆重推出了密境隐私计算服务平台、密境数据安全沙箱、红莲花云浏览器三款拳头产品。海泰密境:以密码之力,守护您的安全之境海泰方圆产品总监Peter孙发表了《密码技术驱动隐私计算要素流通服......
  • 密码学
    什么是密码学?答:密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学;应用于破译密码以获取通信情报的,称为破译学。总称密码学。 最通用的计算机密码算法有哪些?1、DES(数据加密标准)是最通用的计算机加密算法。DES是......
  • Smartbi 修改用户密码漏洞
    漏洞简介通过查看Smartbi的补丁包信息,发现存在漏洞在某种特定情况下修改用户的密码,进行简单的复现和分析​漏洞复现在页面上修改密码时,需要知道原本的用户对应的密码​​直接构造这样的数据包,就不需要知道原本的密码,知道用户名就可以修改密码POST/smartbi/vision/RMIS......
  • JS逆向实战21——某查查webpack密码加密
    声明本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!网站aHR0cHM6Ly93d3cucWNjLmNvbS8=前言阅读前请先阅读下我的另一篇文章看看别的webpack打包的网站......
  • 阻止谷歌浏览器记住密码功能
    有些时候写登录页面的时候会遇到这种问题,就是有input密码框的时候,输入完密码的时候浏览器会自动记住密码,再次打开页面时会自动填充上,如图原本登录框是这个样子:所以就不美观了,怎样解决这类问题呢?于是搜了半天这个问题,最后的解决方法是:1.在input输入框内加一个属性:autocomplete="new-......
  • 视频监控管理平台EasyCVR视频平台通过navicat修改登录密码的具体操作步骤
    TSINGSEE青犀视频监控管理平台EasyCVR可以根据不同的应用场景需求,让平台在内网、专网、VPN、广域网、互联网等各种环境下进行音视频的采集、接入与多端分发。在视频能力上,平台可实现视频实时直播、云端录像、云存储、回放与检索、告警上报、视频快照、视频转码与分发、平台级联等。......
  • P1043. 弱密码检验
    这道题,我看到大家做的情况我就知道不简单WA惨无人道啊所以这就是今天这个随笔的内容先看题目一些网站在设置密码的时候都会判断你的密码是否为弱密码,通常从字符种类,密码长度等作为判断的依据。但是有的时候密码中包含连续的数字也是弱密码,例如Aa123456789这样的密码也应该......
  • 某公司笔试题 - 密码验证合格程序(附python代码)
    #密码要求#1.长度超过8位;2.包括大小写字母,数字,其它符号,以上四种至少三种;3.不能有长度大于2的包含公共元素的字串重复(其他符号不含空格或换行)#数据范围:输入的字符串长度满足1<=n<=100#检测输入密码defcheckpassword(psw):iflen(psw)<=8orlen(psw)>100:r......