密码强度测试工具包【Java】_测试用例
生活随笔
收集整理的這篇文章主要介紹了
密码强度测试工具包【Java】_测试用例
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
密碼強度測試工具,Java版本,直接運行即可。
例如:
7418520*963.-+
綜合得分:
?
128分。
具體編碼:?
package Action;import java.util.HashMap; import java.util.Iterator; import java.util.Locale; import java.util.Map.Entry; import java.util.regex.Matcher; import java.util.regex.Pattern;/*** 密碼最低要求8字符<br/>* 最少符合下列四項中三項規(guī)則: 大寫英文字符、小寫英文字符、數字、符號<br/>* * 增加字符的變化能提高強度<br/>* 最后的分數為加分減分之后的sum總和<br/>*/ public class PassWord {private String psw;private int length;// 密碼長度private int upperAlp = 0;// 大寫字母長度private int lowerAlp = 0;// 小寫字母長度private int num = 0;// 數字長度private int charlen = 0;// 特殊字符長度/*** 測試主函數* @param args*/public static void main(String[] args) {PassWord pwd=new PassWord("7418520*963.-+");int jiafen = pwd.jiafen();int jianfen = pwd.jianfen();System.out.println("加分合計:"+jiafen+"分");System.out.println("減分合計:"+jianfen+"分");System.out.println("總計得分:"+(jiafen+jianfen)+"分");}/*** new的時候直接傳遞參數用* @param psw*/public PassWord(String psw) {this.psw = psw.replaceAll("\\s", "");this.length = psw.length();}// 密碼長度積分public int CheckPswLength() {return this.length * 4;}// 大寫字母積分public int CheckPswUpper() {String reg = "[A-Z]";Pattern pattern = Pattern.compile(reg);Matcher matcher = pattern.matcher(psw);int j = 0;while (matcher.find()) {j++;}this.upperAlp = j;if (j <= 0) {return 0;}return (this.length - j) * 2;}// 測試小寫字母字符public int CheckPwsLower() {String reg = "[a-z]";Pattern pattern = Pattern.compile(reg);Matcher matcher = pattern.matcher(this.psw);int j = 0;while (matcher.find()) {j++;}this.lowerAlp = j;if (j <= 0) {return 0;}return (this.length - j) * 2;}// 測試數字字符public int checkNum() {String reg = "[0-9]";Pattern pattern = Pattern.compile(reg);Matcher matcher = pattern.matcher(this.psw);int j = 0;while (matcher.find()) {j++;}this.num = j;if (this.num == this.length) {return 0;}return j * 4;}// 測試符號字符public int checkChar() {charlen = this.length - this.upperAlp - this.lowerAlp - this.num;return this.charlen * 6;}/*** 密碼中間穿插數字或符號* * @return*/public int checkNumOrCharInStr() {int j = this.num + this.charlen - 1;if (j < 0) {j = 0;}if (this.num + this.charlen == this.length) {j = this.length - 2;}return j * 2;}/*** 最低要求標準<br/>* 該方法需要在以上加分方法使用后才可以使用* * @return*/public int LowerQuest() {int j = 0;if (this.length >= 8) {j++;}if (this.upperAlp > 0) {j++;}if (this.lowerAlp > 0) {j++;}if (this.num > 0) {j++;}if (this.charlen > 0) {j++;}if (j >= 4) {} else {j = 0;}return j * 2;}/** =================分割線===扣分項目===================== **/// 只包含英文字母public int OnlyHasAlp() {if (this.length == (this.upperAlp + this.lowerAlp)) {return -this.length;}return 0;}// 只包含數字public int OnlyHasNum() {if (this.length == this.num) {return -this.length;}return 0;}// 重復字符扣分public int repeatDex() {char[] c = this.psw.toLowerCase().toCharArray();HashMap<Character, Integer> hashMap = new HashMap<Character, Integer>();for (int i = 0; i < c.length; i++) {if (hashMap.containsKey(c[i])) {hashMap.put(c[i], hashMap.get(c[i]) + 1);} else {hashMap.put(c[i], 1);}}int sum = 0;Iterator<Entry<Character, Integer>> iterator = hashMap.entrySet().iterator();while (iterator.hasNext()) {int j = iterator.next().getValue();if (j > 0) {sum = sum + j * (j - 1);}}return -sum;}// 連續(xù)英文大寫字符public int seriseUpperAlp() {int j = 0;char[] c = this.psw.toCharArray();for (int i = 0; i < c.length - 1; i++) {if (Pattern.compile("[A-Z]").matcher(c[i] + "").find()) {if (Pattern.compile("[A-Z]").matcher(c[i + 1] + "").find()) {j++;}}}return -2 * j;}// 連續(xù)英文小寫字符public int seriseLowerAlp() {String reg = "[a-z]";int j = 0;char[] c = this.psw.toCharArray();for (int i = 0; i < c.length - 1; i++) {if (Pattern.compile(reg).matcher(c[i] + "").find() && c[i] + 1 == c[i + 1]) {j++;}}return -2 * j;}// 連續(xù)數字字符public int seriseNum() {String reg = "[0-9]";Pattern pattern = Pattern.compile(reg);char[] c = this.psw.toCharArray();int j = 0;for (int i = 0; i < c.length - 1; i++) {if (pattern.matcher(c[i] + "").matches() && pattern.matcher(c[i + 1] + "").matches()) {j++;}}return -2 * j;}// 連續(xù)字母abc def之類超過3個扣分 不區(qū)分大小寫字母public int seriesAlp2Three() {int j = 0;char[] c = this.psw.toLowerCase(Locale.CHINA).toCharArray();for (int i = 0; i < c.length - 2; i++) {if (Pattern.compile("[a-z]").matcher(c[i] + "").find()) {if ((c[i + 1] == c[i] + 1) && (c[i + 2] == c[i] + 2)) {j++;}}}return -3 * j;}// 連續(xù)數字123 234之類超過3個扣分public int seriesNum2Three() {int j = 0;char[] c = this.psw.toLowerCase(Locale.CHINA).toCharArray();for (int i = 0; i < c.length - 2; i++) {if (Pattern.compile("[0-9]").matcher(c[i] + "").find()) {if ((c[i + 1] == c[i] + 1) && (c[i + 2] == c[i] + 2)) {j++;}}}return -3 * j;}public int jiafen() {System.out.println("密碼字符=" + CheckPswLength());System.out.println("大寫英文字符=" + CheckPswUpper());System.out.println("小寫英文字符=" + CheckPwsLower());System.out.println("數字字符=" + checkNum());System.out.println("符號字符=" + checkChar());System.out.println("密碼中間查查數字或符號字符=" + checkNumOrCharInStr());System.out.println("已連密碼最低要求項目=" + LowerQuest());return CheckPswLength()+CheckPswUpper()+CheckPwsLower()+checkNum()+checkChar()+checkNumOrCharInStr()+LowerQuest();}public int jianfen() {System.out.println("只有英文字符=" + OnlyHasAlp());System.out.println("只有數字字符=" + OnlyHasNum());System.out.println("重復字符 (Case Insensitive)=" + repeatDex());System.out.println("重復英文大寫字符=" + seriseUpperAlp());System.out.println("重復英文小寫字符=" + seriseLowerAlp());System.out.println("連續(xù)數字字符=" + seriseNum());System.out.println("連續(xù)字母超過三個(如abc,def)=" + seriesAlp2Three());System.out.println("連續(xù)數字超過三個(如123,234)=" + seriesNum2Three());return OnlyHasAlp()+OnlyHasNum()+repeatDex()+seriseUpperAlp()+seriseLowerAlp()+seriseNum()+seriesAlp2Three()+seriesNum2Three();} }總結
以上是生活随笔為你收集整理的密码强度测试工具包【Java】_测试用例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10磁盘检查命令
- 下一篇: mysql全文索引FULLTEXT的哈希