java实现的密码强度检测功能完整示例
本文实例讲述了java实现的密码强度检测功能。分享给大家供大家参考,具体如下:
CheckStrength.java文件:
packagecom.wx.pwd; /** *检测密码强度 * *@authorvenshine */ publicclassCheckStrength{ publicenumLEVEL{ EASY,MIDIUM,STRONG,VERY_STRONG,EXTREMELY_STRONG } /** *NUM数字 *SMALL_LETTER小写字母 *CAPITAL_LETTER大写字母 *OTHER_CHAR特殊字符 */ privatestaticfinalintNUM=1; privatestaticfinalintSMALL_LETTER=2; privatestaticfinalintCAPITAL_LETTER=3; privatestaticfinalintOTHER_CHAR=4; /** *简单的密码字典 */ privatefinalstaticString[]DICTIONARY={"password","abc123","iloveyou","adobe123","123123","sunshine", "1314520","a1b2c3","123qwe","aaa111","qweasd","admin","passwd"}; /** *检查字符类型,包括num、大写字母、小写字母和其他字符。 * *@paramc *@return */ privatestaticintcheckCharacterType(charc){ if(c>=48&&c<=57){ returnNUM; } if(c>=65&&c<=90){ returnCAPITAL_LETTER; } if(c>=97&&c<=122){ returnSMALL_LETTER; } returnOTHER_CHAR; } /** *按不同类型计算密码的数量 * *@parampasswd *@paramtype *@return */ privatestaticintcountLetter(Stringpasswd,inttype){ intcount=0; if(null!=passwd&&passwd.length()>0){ for(charc:passwd.toCharArray()){ if(checkCharacterType(c)==type){ count++; } } } returncount; } /** *检查密码的强度 * *@parampasswd *@returnstrengthlevel */ publicstaticintcheckPasswordStrength(Stringpasswd){ if(StringUtils.equalsNull(passwd)){ thrownewIllegalArgumentException("passwordisempty"); } intlen=passwd.length(); intlevel=0; //增加点 //判断密码是否含有数字有level++ if(countLetter(passwd,NUM)>0){ level++; } //判断密码是否含有小写字母有level++ if(countLetter(passwd,SMALL_LETTER)>0){ level++; } //判断密码是否还有大写字母有level++ if(len>4&&countLetter(passwd,CAPITAL_LETTER)>0){ level++; } //判断密码是否还有特殊字符有level++ if(len>6&&countLetter(passwd,OTHER_CHAR)>0){ level++; } //密码长度大于4并且2种类型组合......(不一一概述) if(len>4&&countLetter(passwd,NUM)>0&&countLetter(passwd,SMALL_LETTER)>0 ||countLetter(passwd,NUM)>0&&countLetter(passwd,CAPITAL_LETTER)>0 ||countLetter(passwd,NUM)>0&&countLetter(passwd,OTHER_CHAR)>0 ||countLetter(passwd,SMALL_LETTER)>0&&countLetter(passwd,CAPITAL_LETTER)>0 ||countLetter(passwd,SMALL_LETTER)>0&&countLetter(passwd,OTHER_CHAR)>0 ||countLetter(passwd,CAPITAL_LETTER)>0&&countLetter(passwd,OTHER_CHAR)>0){ level++; } //密码长度大于6并且3中类型组合......(不一一概述) if(len>6&&countLetter(passwd,NUM)>0&&countLetter(passwd,SMALL_LETTER)>0 &&countLetter(passwd,CAPITAL_LETTER)>0||countLetter(passwd,NUM)>0 &&countLetter(passwd,SMALL_LETTER)>0&&countLetter(passwd,OTHER_CHAR)>0 ||countLetter(passwd,NUM)>0&&countLetter(passwd,CAPITAL_LETTER)>0 &&countLetter(passwd,OTHER_CHAR)>0||countLetter(passwd,SMALL_LETTER)>0 &&countLetter(passwd,CAPITAL_LETTER)>0&&countLetter(passwd,OTHER_CHAR)>0){ level++; } //密码长度大于8并且4种类型组合......(不一一概述) if(len>8&&countLetter(passwd,NUM)>0&&countLetter(passwd,SMALL_LETTER)>0 &&countLetter(passwd,CAPITAL_LETTER)>0&&countLetter(passwd,OTHER_CHAR)>0){ level++; } //密码长度大于6并且2种类型组合每种类型长度大于等于3或者2......(不一一概述) if(len>6&&countLetter(passwd,NUM)>=3&&countLetter(passwd,SMALL_LETTER)>=3 ||countLetter(passwd,NUM)>=3&&countLetter(passwd,CAPITAL_LETTER)>=3 ||countLetter(passwd,NUM)>=3&&countLetter(passwd,OTHER_CHAR)>=2 ||countLetter(passwd,SMALL_LETTER)>=3&&countLetter(passwd,CAPITAL_LETTER)>=3 ||countLetter(passwd,SMALL_LETTER)>=3&&countLetter(passwd,OTHER_CHAR)>=2 ||countLetter(passwd,CAPITAL_LETTER)>=3&&countLetter(passwd,OTHER_CHAR)>=2){ level++; } //密码长度大于8并且3种类型组合每种类型长度大于等于3或者2......(不一一概述) if(len>8&&countLetter(passwd,NUM)>=2&&countLetter(passwd,SMALL_LETTER)>=2 &&countLetter(passwd,CAPITAL_LETTER)>=2||countLetter(passwd,NUM)>=2 &&countLetter(passwd,SMALL_LETTER)>=2&&countLetter(passwd,OTHER_CHAR)>=2 ||countLetter(passwd,NUM)>=2&&countLetter(passwd,CAPITAL_LETTER)>=2 &&countLetter(passwd,OTHER_CHAR)>=2||countLetter(passwd,SMALL_LETTER)>=2 &&countLetter(passwd,CAPITAL_LETTER)>=2&&countLetter(passwd,OTHER_CHAR)>=2){ level++; } //密码长度大于10并且4种类型组合每种类型长度大于等于2......(不一一概述) if(len>10&&countLetter(passwd,NUM)>=2&&countLetter(passwd,SMALL_LETTER)>=2 &&countLetter(passwd,CAPITAL_LETTER)>=2&&countLetter(passwd,OTHER_CHAR)>=2){ level++; } //特殊字符>=3level++; if(countLetter(passwd,OTHER_CHAR)>=3){ level++; } //特殊字符>=6level++; if(countLetter(passwd,OTHER_CHAR)>=6){ level++; } //长度>12>16level++ if(len>12){ level++; if(len>=16){ level++; } } //减少点 if("abcdefghijklmnopqrstuvwxyz".indexOf(passwd)>0||"ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(passwd)>0){ level--; } if("qwertyuiop".indexOf(passwd)>0||"asdfghjkl".indexOf(passwd)>0||"zxcvbnm".indexOf(passwd)>0){ level--; } if(StringUtils.isNumeric(passwd)&&("01234567890".indexOf(passwd)>0||"09876543210".indexOf(passwd)>0)){ level--; } if(countLetter(passwd,NUM)==len||countLetter(passwd,SMALL_LETTER)==len ||countLetter(passwd,CAPITAL_LETTER)==len){ level--; } if(len%2==0){//aaabbb Stringpart1=passwd.substring(0,len/2); Stringpart2=passwd.substring(len/2); if(part1.equals(part2)){ level--; } if(StringUtils.isCharEqual(part1)&&StringUtils.isCharEqual(part2)){ level--; } } if(len%3==0){//ababab Stringpart1=passwd.substring(0,len/3); Stringpart2=passwd.substring(len/3,len/3*2); Stringpart3=passwd.substring(len/3*2); if(part1.equals(part2)&&part2.equals(part3)){ level--; } } if(StringUtils.isNumeric(passwd)&&len>=6){//19881010or881010 intyear=0; if(len==8||len==6){ year=Integer.parseInt(passwd.substring(0,len-4)); } intsize=StringUtils.sizeOfInt(year); intmonth=Integer.parseInt(passwd.substring(size,size+2)); intday=Integer.parseInt(passwd.substring(size+2,len)); if(year>=1950&&year<2050&&month>=1&&month<=12&&day>=1&&day<=31){ level--; } } if(null!=DICTIONARY&&DICTIONARY.length>0){//dictionary for(inti=0;i=0){ level--; break; } } } if(len<=6){ level--; if(len<=4){ level--; if(len<=3){ level=0; } } } if(StringUtils.isCharEqual(passwd)){ level=0; } if(level<0){ level=0; } returnlevel; } /** *获得密码强度等级,包括简单、复杂、强、强、强 * *@parampasswd *@return */ publicstaticLEVELgetPasswordLevel(Stringpasswd){ intlevel=checkPasswordStrength(passwd); switch(level){ case0: case1: case2: case3: returnLEVEL.EASY; case4: case5: case6: returnLEVEL.MIDIUM; case7: case8: case9: returnLEVEL.STRONG; case10: case11: case12: returnLEVEL.VERY_STRONG; default: returnLEVEL.EXTREMELY_STRONG; } } }
StringUtils.java文件:
packagecom.wx.pwd; /** *字符串工具类 * *@authorvenshine */ publicclassStringUtils{ privatefinalstaticint[]SIZE_TABLE={9,99,999,9999,99999,999999,9999999,99999999,999999999, Integer.MAX_VALUE}; /** *计算一个整数的大小 * *@paramx *@return */ publicstaticintsizeOfInt(intx){ for(inti=0;;i++) if(x<=SIZE_TABLE[i]){ returni+1; } } /** *判断字符串的每个字符是否相等 * *@paramstr *@return */ publicstaticbooleanisCharEqual(Stringstr){ returnstr.replace(str.charAt(0),'').trim().length()==0; } /** *确定字符串是否为数字 * *@paramstr *@return */ publicstaticbooleanisNumeric(Stringstr){ for(inti=str.length();--i>=0;){ if(!Character.isDigit(str.charAt(i))){ returnfalse; } } returntrue; } /** *判断字符串是否为空格、空(“)”或null。 * *@paramstr *@return */ publicstaticbooleanequalsNull(Stringstr){ intstrLen; if(str==null||(strLen=str.length())==0||str.equalsIgnoreCase("null")){ returntrue; } for(inti=0;iCheckPWD.java文件:
packagecom.wx.pwd; publicclassCheckPWD{ publicstaticvoidmain(String[]args){ Stringpasswd="myNameJOB123_-+="; System.out.println(CheckStrength.checkPasswordStrength(passwd)); System.out.println(CheckStrength.getPasswordLevel(passwd)); } }运行结果:
13
EXTREMELY_STRONGPS:这里再为大家提供两款功能类似的在线工具供大家参考:
密码安全性在线检测:
http://tools.jb51.net/password/my_password_safe高强度密码生成器:
http://tools.jb51.net/password/CreateStrongPassword在线随机数字/字符串生成工具:
http://tools.jb51.net/aideddesign/suijishu更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java字符与字符串操作技巧总结》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。