C語言實(shí)現(xiàn)密碼強(qiáng)度檢測-創(chuàng)新互聯(lián)

本文實(shí)例為大家分享了C語言實(shí)現(xiàn)密碼強(qiáng)度檢測,供大家參考,具體內(nèi)容如下

創(chuàng)新互聯(lián)于2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元霍城做網(wǎng)站,已為上家服務(wù),為霍城各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108

1 方案得分項(xiàng)

一、密碼長度:

公式 :+(n*4),其中n表示密碼長度

二、大寫字母:

公式:+((len-n)*2),其中n表示大寫字母個(gè)數(shù),len表示密碼長度

三、小寫字母:

公式:+((len-n)*2),其中n表示小寫字母個(gè)數(shù),len表示密碼長度

四、數(shù)字:

  • 公式:+(n*4),其中n表示數(shù)字個(gè)數(shù)
  • 條件:滿足n < len,才能得到加分,len表示密碼長度

五、符號(hào):

公式:+(n*6),其中n表示符號(hào)個(gè)數(shù)

六、位于中間的數(shù)字或符號(hào):

公式:+(n*2),其中n表示位于中間的數(shù)字或符號(hào)個(gè)數(shù)

七、最低條件得分:

  • 公式:+(n*2),其中n表示滿足的最低條件條目數(shù)
  • 條件:只有滿足最低條件,才能得到加分

其中最低條件的條目如下:

1.密碼長度不小于8位
2.包含大寫字母
3.包含小寫字母
4.包含數(shù)字
5.包含符號(hào)

最低條件要求滿足條目1并至少滿足條目2-5中的任意三條。

2 方案減分項(xiàng)

一、只有字母:

公式:-n,其中n表示字母個(gè)數(shù)

二、只有數(shù)字:

公式:-n,其中n表示數(shù)字個(gè)數(shù)

三、重復(fù)字符數(shù)(大小寫敏感):

該項(xiàng)描述復(fù)雜,具體計(jì)算方法見如下示例程序:

C語言實(shí)現(xiàn)密碼強(qiáng)度檢測

四、連續(xù)大寫字母:

  • 公式:-(n*2),其中n表示連續(xù)大寫字母出現(xiàn)的次數(shù)
  • 舉例:如輸入AUB,則n=2

五、連續(xù)小寫字母:

  • 公式:-(n*2),其中n表示連續(xù)小寫字母出現(xiàn)的次數(shù)
  • 舉例:如輸入aub,則n=2

六、連續(xù)數(shù)字:

  • 公式:-(n*2),其中n表示連續(xù)數(shù)字出現(xiàn)的次數(shù)
  • 舉例:如輸入381,則n=2

七、正序或逆序字母:

公式:-(n*3),其中n表示連續(xù)發(fā)生的次數(shù)

  • 正序或逆序是指字母表中的順序
  • 不區(qū)分大小寫

條件:只有連續(xù)3個(gè)字母或以上,才會(huì)減分,
例1:如輸入ABC,則n=1
例2:如輸入dcBA,則n=2

八、正序或逆序數(shù)字:

  • 公式:-(n*3),其中n表示連續(xù)發(fā)生的次數(shù)
  • 條件:只有連續(xù)3個(gè)數(shù)字或以上,才會(huì)減分
  • 例1:如輸入123,則n=1,
  • 例2:如輸入4321,則n=2
  • 例3:如輸入12,則不會(huì)減分

九、正序或逆序符號(hào):

  • 公式:-(n*3),其中n表示連續(xù)發(fā)生的次數(shù)
  • 條件:只有連續(xù)3個(gè)符號(hào)或以上,才會(huì)減分

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.密碼長度
 int passwdlen;
 passwdlen = strlen(passwd);
 
 //2~5.大小寫字母個(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)建站bm7419.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

當(dāng)前文章:C語言實(shí)現(xiàn)密碼強(qiáng)度檢測-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://bm7419.com/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)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化