返回列表 發帖

a624: 4. Password Analyzer

內容 :

你在一家成長中的電子商務網站工作,而它也成了竊賊覬覦的對象。竊賊以猜測密碼的方式來存取顧客的帳號,這常常是輕而易舉的 (如 "secret", "password", 和 "1234")。如果你的顧客使用較好的密碼,你的公司就可以省點力氣來處理盜刷的問題。

你被賦與的任務為設計一個密碼分析器以告知顧客他們所選的密碼的強度。一個「強」密碼以增加長度或混用字母、數字及符號來增加猜測的難度。在這項工作中,一個「強」 (strong) 密碼擁有以下所有特性:

長度至少 8 個字元 (如:"spookyfish")
同時有大寫及小寫字母 (如:"sPookyFISH")
同時有字母及至少一個數字或符號 (如:"sPookyFiSH3" 或 "$PookyFI3H")
一個「好」 (good) 密碼擁有兩個上述的特性,一個「尚可」(acceptable) 密碼只擁有一個特性。不符合上述任何特性的則為「弱」(week) 密碼。請寫一個程式來分析所給的密碼的強度。

輸入說明 :
每筆測資一行,其中含有一個密碼,長度最大為 30 字元。密碼中沒有空白。
輸出說明 :
依據上述的特性,輸出所輸入密碼的強度。
範例輸入 :
lizard
aardvark
Aardvark
Aardvark77
範例輸出:
This password is WEAK
This password is ACCEPTABLE
This password is GOOD
This password is STRONG
ABCDEFGHIJKLMNOPQRSTUVWXYZ

  1. #include<string>
  2. #include<cctype>
  3. #include<iostream>
  4. using namespace std;
  5. inline bool is_upper(string s)
  6. {
  7.      for(int i=0;i<s.size();i++)
  8.              if(isupper(s[i]))
  9.                 return true;

  10.      return false;
  11. }
  12. inline bool is_lower(string s)
  13. {

  14.      for(int i=0;i<s.size();i++)
  15.              if(islower(s[i]))
  16.                return true;
  17.      return false;
  18. }
  19. inline bool is_alpha(string s)
  20. {

  21.      for(int i=0;i<s.size();i++)
  22.              if(isalpha(s[i]))
  23.                return true;
  24.      return false;
  25. }
  26. inline bool is_not_alpha(string s)
  27. {

  28.      for(int i=0;i<s.size();i++)
  29.              if(!isalpha(s[i]))
  30.                return true;
  31.      return false;
  32. }
  33. int main()
  34. {
  35.     string s;
  36.     while(getline(cin,s))
  37.     {
  38.         int score=0,size=s.size();
  39.         if(size>=8)
  40.         score++;
  41.         if(is_alpha(s)&&is_not_alpha(s))
  42.             score++;
  43.         if(is_upper(s)&&is_lower(s))
  44.              score++;
  45.         cout<<"This password is ";
  46.         switch(score)
  47.         {
  48.         case 0:
  49.              cout<<"WEAK\n";
  50.              break;
  51.         case 1:
  52.              cout<<"ACCEPTABLE\n";
  53.              break;
  54.         case 2:
  55.              cout<<"GOOD\n";

  56.              break;
  57.         case 3:
  58.              cout<<"STRONG\n";
  59.              break;
  60.         }

  61.     }
  62.     return 0;
  63. }
複製代碼

TOP

返回列表