Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chương trình C++ kiểm tra độ mạnh mật khẩu

Cho chuỗi đầu vào chứa các ký tự mật khẩu, nhiệm vụ là kiểm tra độ mạnh của mật khẩu.

Độ mạnh của mật khẩu là khi bạn nói rằng mật khẩu có dễ bị đoán hay bẻ khóa không. Độ mạnh nên thay đổi từ yếu, trung bình và mạnh. Để kiểm tra độ mạnh, chúng ta phải kiểm tra các điểm sau:

  • Mật khẩu phải dài ít nhất 8 ký tự
  • Phải chứa ít nhất 1 chữ cái thường
  • Phải chứa ít nhất 1 chữ cái hoa
  • Phải chứa ít nhất 1 chữ số
  • Phải chứa ít nhất 1 ký tự đặc biệt như: !@#$%^&*()><,.+=-

Ví dụ, mật khẩu "tutorialspoint" dễ bị đoán nên ta nói mật khẩu đó "yếu" vì chỉ chứa chữ thường. Mặt khác, "Tutorialspoint@863!" là mạnh vì có cả chữ hoa, thường, chữ số, ký tự đặc biệt và dài hơn 8 ký tự, đáp ứng tất cả điều kiện.

Nếu mật khẩu đáp ứng hơn một nửa đặc điểm của mật khẩu mạnh, coi là trung bình. Ví dụ "tutorialspoint12" được coi là trung bình vì có chữ thường, chữ số và dài hơn 8 ký tự.

Ví dụ

Đầu vào: tutoriAlspOint!@12
Đầu ra: Độ mạnh mật khẩu: Mạnh
Giải thích: Mật khẩu có 1 chữ thường, 1 chữ hoa, 1 ký tự đặc biệt, dài hơn 8 ký tự và có chữ số, do đó mật khẩu mạnh.

Đầu vào: tutorialspoint
Đầu ra: Độ mạnh mật khẩu: Yếu

Phương pháp giải quyết:

  • Nhập chuỗi mật khẩu
  • Kiểm tra mật khẩu theo tất cả các yếu tố đánh giá độ mạnh
  • In độ mạnh mật khẩu theo các yếu tố

THUẬT TOÁN

BẮT ĐẦU
Bước 1 → Trong hàm void printStrongNess(string& input)
    Khai báo và khởi tạo n = input.length()
    Khai báo bool hasLower = false, hasUpper = false
    Khai báo bool hasDigit = false, specialChar = false
    Khai báo string normalChars = "abcdefghijklmnopqrstu" + "vwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "
    VỒNG LẶP i = 0 đến n-1
        NẾU (islower(input[i])) Gán hasLower = true
        NẾU (isupper(input[i])) Gán hasUpper = true
        NẾU (isdigit(input[i])) Gán hasDigit = true
        Gán size_t special = input.find_first_not_of(normalChars)
        NẾU (special != string::npos) Gán specialChar = true
    KẾT THÚC VỒNG LẶP
    In "Độ mạnh mật khẩu: "
    NẾU (hasLower VÀ hasUpper VÀ hasDigit VÀ specialChar VÀ (n >= 8))
        In "Mạnh"
    NGƯỢC LẠI NẾU ((hasLower HOẶC hasUpper) VÀ specialChar VÀ (n >= 6))
        In "Trung bình"
    NGƯỢC LẠI
        In "Yếu"
Bước 2 → Trong hàm int main()
    Khai báo và khởi tạo input = "tutorialspoint!@12"
    Gọi printStrongNess(input)
DỪNG

Ví dụ mã nguồn

#include <iostream>
using namespace std;

void printStrongNess(string& input) {
    int n = input.length();
    // Kiểm tra chữ thường
    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;
    }
    // Độ mạnh mật khẩu
    cout << "Độ mạnh mật khẩu: ";
    if (hasLower && hasUpper && hasDigit && specialChar && (n >= 8))
        cout << "Mạnh" << endl;
    else if ((hasLower || hasUpper) && specialChar && (n >= 6))
        cout << "Trung bình" << endl;
    else
        cout << "Yếu" << endl;
}

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

Kết quả đầu ra

Độ mạnh mật khẩu: Trung bình