Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ ตรวจสอบความแข็งแกร่งของรหัสผ่าน

กำหนดอินพุตสตริงที่มีตัวอักษรรหัสผ่าน งานคือตรวจสอบความแข็งแกร่งของรหัสผ่าน

ความแข็งแกร่งของรหัสผ่านคือการบอกว่ารหัสผ่านนั้นง่ายต่อการเดาหรือแฮกหรือไม่ ความแข็งแกร่งควรแตกต่างกันระหว่าง weak (อ่อน), average (ปานกลาง) และ strong (แข็งแกร่ง) เพื่อตรวจสอบความแข็งแกร่งเราต้องตรวจสอบจุดต่อไปนี้ −

  • รหัสผ่านต้องมีความยาวอย่างน้อย 8 ตัวอักษร
  • ต้องมีตัวอักษรพิมพ์เล็กอย่างน้อย 1 ตัว
  • ต้องมีตัวอักษรพิมพ์ใหญ่อย่างน้อย 1 ตัว
  • ต้องมีตัวเลขอย่างน้อย 1 ตัว
  • ต้องมีตัวอักษรพิเศษอย่างน้อย 1 ตัว เช่น : !@#$%^&*()><,.+=-

เช่นมีรหัสผ่าน "tutorialspoint" ซึ่งเดาง่าย จึงกล่าวได้ว่ารหัสผ่านนี้ "weak" เพราะมีแต่ตัวพิมพ์เล็ก ในขณะที่รหัสผ่าน "Tutorialspoint@863!" เป็น strong เพราะมีทั้งพิมพ์ใหญ่-เล็ก ตัวเลข และตัวอักษรพิเศษ และยาวกว่า 8 ตัวอักษร จึงตรงเงื่อนไขทั้งหมดที่ทำให้รหัสผ่านแข็งแกร่ง

หากมีรหัสผ่านที่ตรงกับคุณสมบัติของรหัสผ่านแข็งแกร่งมากกว่าครึ่งหนึ่ง จะถือว่าเป็น moderate (ปานกลาง) เช่นรหัสผ่าน "tutorialspoint12" จะถือว่า moderate เพราะมีตัวพิมพ์เล็ก ตัวเลข และความยาวมากกว่า 8 ตัวอักษร

ตัวอย่าง

Input: tutoriAlspOint!@12 Output: Strength of password:-Strong Explanation: รหัสผ่านมี 1 ตัวพิมพ์เล็ก, 1 ตัวพิมพ์ใหญ่, 1 ตัวอักษรพิเศษ, ยาวกว่า 8 ตัวอักษร และมีตัวเลข จึงเป็น strong
Input: tutorialspoint Output: Strength of password:-Weak

วิธีการที่เราจะใช้แก้ปัญหา −

  • รับสตริงอินพุตสำหรับรหัสผ่าน
  • ตรวจสอบรหัสผ่านสำหรับทุกปัจจัยที่รับผิดชอบในการตัดสินความแข็งแกร่ง
  • ตามปัจจัยพิมพ์ความแข็งแกร่งของรหัสผ่าน

อัลกอริทึม

Start
Step 1 → ในฟังก์ชัน void printStrongNess(string& input)
  ประกาศและกำหนด n = input.length()
  ประกาศ bool hasLower = false, hasUpper = false
  ประกาศ bool hasDigit = false, specialChar = false
  ประกาศ string normalChars = "abcdefghijklmnopqrstu" "vwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "
  ลูป For i = 0 และ i < n และ i++
    If (islower(input[i]))
      ตั้งค่า hasLower = true
    If (isupper(input[i]))
      ตั้งค่า hasUpper = true
    If (isdigit(input[i]))
      ตั้งค่า hasDigit = true
    ตั้งค่า size_t special = input.find_first_not_of(normalChars)
    If (special != string::npos)
      ตั้งค่า specialChar = true
  End Loop
  พิมพ์ "Strength of password:-"
  If (hasLower && hasUpper && hasDigit && specialChar && (n >= 8))
    พิมพ์ "Strong"
  else if ((hasLower || hasUpper) && specialChar && (n >= 6))
    พิมพ์ "Moderate"
  else
    พิมพ์ "Weak"
Step 2 → ในฟังก์ชัน int main()
  ประกาศและกำหนด input = "tutorialspoint!@12"
  เรียก printStrongNess(input)
Stop

ตัวอย่างโค้ด

#include <iostream> 
using namespace std; 

void printStrongNess(string& input) { 
    int n = input.length(); 
    // ตรวจสอบตัวอักษรพิมพ์เล็กในสตริง
    bool hasLower = false, hasUpper = false; 
    bool hasDigit = false, specialChar = false; 
    string normalChars = "abcdefghijklmnopqrstu" "vwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "; 
    for (int i = 0; i < n; i++) { 
        if (islower(input[i])) 
            hasLower = true; 
        if (isupper(input[i])) 
            hasUpper = true; 
        if (isdigit(input[i])) 
            hasDigit = true; 
        size_t special = input.find_first_not_of(normalChars); 
        if (special != string::npos) 
            specialChar = true; 
    } 
    // ความแข็งแกร่งของรหัสผ่าน
    cout << "Strength of password:-"; 
    if (hasLower && hasUpper && hasDigit && specialChar && (n >= 8)) 
        cout << "Strong" << endl; 
    else if ((hasLower || hasUpper) && specialChar && (n >= 6)) 
        cout << "Moderate" << endl; 
    else 
        cout << "Weak" << endl; 
} 

int main() { 
    string input = "tutorialspoint!@12"; 
    printStrongNess(input); 
    return 0; 
}

ผลลัพธ์

Strength of password:-Moderate