本文實(shí)例為大家分享了C語(yǔ)言實(shí)現(xiàn)密碼強(qiáng)度檢測(cè),供大家參考,具體內(nèi)容如下
1 方案得分項(xiàng)
一、密碼長(zhǎng)度:
公式 :+(n*4),其中n表示密碼長(zhǎng)度
二、大寫字母:
公式:+((len-n)*2),其中n表示大寫字母?jìng)€(gè)數(shù),len表示密碼長(zhǎng)度
三、小寫字母:
公式:+((len-n)*2),其中n表示小寫字母?jìng)€(gè)數(shù),len表示密碼長(zhǎng)度
四、數(shù)字:
五、符號(hào):
公式:+(n*6),其中n表示符號(hào)個(gè)數(shù)
六、位于中間的數(shù)字或符號(hào):
公式:+(n*2),其中n表示位于中間的數(shù)字或符號(hào)個(gè)數(shù)
七、最低條件得分:
其中最低條件的條目如下:
1.密碼長(zhǎng)度不小于8位
2.包含大寫字母
3.包含小寫字母
4.包含數(shù)字
5.包含符號(hào)
最低條件要求滿足條目1并至少滿足條目2-5中的任意三條。
2 方案減分項(xiàng)
一、只有字母:
公式:-n,其中n表示字母?jìng)€(gè)數(shù)
二、只有數(shù)字:
公式:-n,其中n表示數(shù)字個(gè)數(shù)
三、重復(fù)字符數(shù)(大小寫敏感):
該項(xiàng)描述復(fù)雜,具體計(jì)算方法見(jiàn)如下示例程序:
四、連續(xù)大寫字母:
五、連續(xù)小寫字母:
六、連續(xù)數(shù)字:
七、正序或逆序字母:
公式:-(n*3),其中n表示連續(xù)發(fā)生的次數(shù)
條件:只有連續(xù)3個(gè)字母或以上,才會(huì)減分,
例1:如輸入ABC,則n=1
例2:如輸入dcBA,則n=2
八、正序或逆序數(shù)字:
九、正序或逆序符號(hào):
3 方案等級(jí)劃分
根據(jù)密碼評(píng)分,將密碼劃分成以下5個(gè)等級(jí):
>= 80: 非常強(qiáng)(VERY_STRONG)
>= 60: 強(qiáng)(STRONG)
>= 40: 好(GOOD)
>= 20: 弱(WEAK)
>= 0: 非常弱( VERY_WEAK)
int passwdmeter(char *passwd) { int i = 0; //1.密碼長(zhǎng)度 int passwdlen; passwdlen = strlen(passwd); //2~5.大小寫字母?jìng)€(gè)數(shù),數(shù)字個(gè)數(shù),符號(hào)個(gè)數(shù) int UppercaseLetters = 0; int LowercaseLetters = 0; int Numbers = 0,Symbols = 0; for(i = 0;i < passwdlen; i++) { if (passwd[i]>='a' && passwd[i] <= 'z') LowercaseLetters++; else if (passwd[i]>='A' && passwd[i] <= 'Z') UppercaseLetters++; else if(passwd[i]>='0' && passwd[i] <= '9') Numbers++; else Symbols++; } //6.位于中間的數(shù)字或符號(hào) int MiddleNumbersorSymbols = Numbers+Symbols; if (passwd[0]>='a' && passwd[0] <= 'z') ; else if (passwd[0]>='A' && passwd[0] <= 'Z') ; else if(passwd[0]>='0' && passwd[0] <= '9') MiddleNumbersorSymbols--; else MiddleNumbersorSymbols--; if (passwd[passwdlen - 1]>='a' && passwd[passwdlen - 1] <= 'z') ; else if (passwd[passwdlen - 1]>='A' && passwd[passwdlen - 1] <= 'Z') ; else if(passwd[passwdlen - 1]>='0' && passwd[passwdlen - 1] <= '9') MiddleNumbersorSymbols--; else MiddleNumbersorSymbols--; //7.最低條件得分 int Requirements = 0; if(UppercaseLetters > 0)Requirements++; if(LowercaseLetters > 0)Requirements++; if(Numbers > 0)Requirements++; if(Symbols > 0)Requirements++; if(passwdlen > 8)Requirements++; //總加得分 int Bonus = passwdlen*4 + Symbols*6 + MiddleNumbersorSymbols*2; if (UppercaseLetters)Bonus+= (passwdlen - UppercaseLetters)*2; if (LowercaseLetters)Bonus+= (passwdlen - LowercaseLetters)*2; if (Requirements > 3)Bonus+= Requirements*2; if (Numbers != passwdlen)Bonus+= Numbers*4; //1.只有字母 int LettersOnly = 0; if (UppercaseLetters + LowercaseLetters == passwdlen) LettersOnly = passwdlen; //2.只有數(shù)字 int NumbersOnly = 0; if (Numbers == passwdlen) NumbersOnly = passwdlen; //3.重復(fù)字符數(shù)(大小寫敏感) int RepeatCharacters = 0; int repChar = 0; for(i = 0; i < passwdlen; i++) { int exists = 0; int j = 0; for (j = 0; j < passwdlen; j++) { if (passwd[i] == passwd[j] && i != j) { exists = 1; RepeatCharacters += abs(passwdlen/(j-i)); } } if (exists) { repChar++; int unqChar = passwdlen - repChar; RepeatCharacters = (unqChar) ? ceil(RepeatCharacters/(double)unqChar) : ceil(RepeatCharacters); } } //4~6.連續(xù)大小寫字母,數(shù)字 int ConsecutiveUppercaseLetters = 0; int ConsecutiveLowercaseLetters = 0; int ConsecutiveNumbers = 0; int flag = 0;//1-小寫,2-大寫,3-數(shù)字 int count = 0; for(i = 0 ;i < passwdlen;i++) { if(i == 0){ if (passwd[i]>='a' && passwd[i] <= 'z'){flag = 1;count = 1;} else if (passwd[i]>='A' && passwd[i] <= 'Z'){flag = 2;count = 1;} else if(passwd[i]>='0' && passwd[i] <= '9'){flag = 3;count = 1;} }else { int tmpflag = 0; if (passwd[i]>='a' && passwd[i] <= 'z') { tmpflag = 1; } else if (passwd[i]>='A' && passwd[i] <= 'Z') { tmpflag = 2; } else if(passwd[i]>='0' && passwd[i] <= '9') { tmpflag = 3; }else { tmpflag = 0; } if(tmpflag == flag) count++; else { if(count >= 2) { switch(flag) { case 1: ConsecutiveLowercaseLetters += count-1;break; case 2: ConsecutiveUppercaseLetters += count-1;break; case 3: ConsecutiveNumbers += count-1;break; default: break; } } flag = tmpflag; count = 1; } } } if(count >= 2) { switch(flag) { case 1: ConsecutiveLowercaseLetters += count-1;break; case 2: ConsecutiveUppercaseLetters += count-1;break; case 3: ConsecutiveNumbers += count-1;break; default: break; } } //7~9 正序或者逆序的字母數(shù)字及符號(hào) int SequentialLetters = 0; int Sequenflag = 0;//1-正序,2-反序 int Sequencount = 1; for(i = 1 ;i < passwdlen;i++) { int value = passwd[i]; if(passwd[i]>='a' && passwd[i] <= 'z' && passwd[i-1]>='A' && passwd[i-1] <= 'Z') value = passwd[i] - 32; else if(passwd[i-1]>='a' && passwd[i-1] <= 'z' && passwd[i]>='A' && passwd[i] <= 'Z') value = passwd[i] + 32; int tmpflag = 0; if (value - 1 == passwd[i-1]) { tmpflag = 1; }else if (value + 1 == passwd[i-1]) tmpflag = 2; else tmpflag = 0; if(Sequenflag == 0 && tmpflag != 0) { Sequencount = 1; Sequenflag = tmpflag; } if (tmpflag == Sequenflag) { Sequencount++; }else { if(Sequencount >= 3 && Sequenflag != 0) SequentialLetters += Sequencount-2; Sequencount = 1; Sequenflag = tmpflag; } } if(Sequencount >= 3 && Sequenflag != 0) SequentialLetters += Sequencount-2; //減分項(xiàng)計(jì)算 int Bonus2 = LettersOnly + NumbersOnly + RepeatCharacters + (ConsecutiveUppercaseLetters+ConsecutiveLowercaseLetters+ConsecutiveNumbers)*2 + SequentialLetters*3; int sum = 0; if (Bonus - Bonus2 < 0) return 0; return (Bonus - Bonus2) > 100?100:(Bonus - Bonus2); }
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.rwnh.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
當(dāng)前文章:C語(yǔ)言實(shí)現(xiàn)密碼強(qiáng)度檢測(cè)-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://www.rwnh.cn/article8/hdpop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、移動(dòng)網(wǎng)站建設(shè)、電子商務(wù)、網(wǎng)站導(dǎo)航、品牌網(wǎng)站制作、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容