Viết chương trình kiểm tra password bằng Python

Bạn có thể phát triển công cụ kiểm tra mật khẩu mạnh bằng Python. Dưới đây là chi tiết cách viết chương trình kiểm tra password bằng Python.

Kiểm tra mật khẩu mạnh

Dữ liệu là tài sản quan trọng trong thế giới kỹ thuật số hiện nay. Hơn 8 triệu người đã trở thành nạn nân của hacker mỗi năm và hơn 2200 vụ tấn công mạng diễn ra mỗi ngày. Với tỷ lệ tội phạm mạng đáng báo động, việc dùng các phương pháp bảo vệ trước hacker cần được ưu tiên hàng đầu. Một trong số khía cạnh quan trọng của mọi tài khoản online là mật khẩu.

Nếu một hacker đánh cắp mật khẩu của bạn, họ có thể lấy quyền truy cập thông tin cá nhân, thậm chí tấn công tài khoản ngân hàng của bạn chỉ trong vài phút. Điều đó thật đáng sợ nhưng bạn có thể học cách bảo mật mật khẩu bằng phương pháp xây dựng chương trình Python để kiểm tra độ mạnh của nó.

Yếu tố tạo nên một mật khẩu mạnh:

  • Dài ít nhất 12 ký tự. Mật khẩu càng dài, nguy cơ bị đánh cắp mật khẩu càng thấp.
  • Mật khẩu nên bao gồm các chữ viết thường, hoa, số và ký tự đặc biệt.
  • Tránh lặp ký tự trong mật khẩu.
  • Không nên chứa thông tin cá nhân như tên, số điện thoại hay bất kỳ dữ liệu nào mà người khác có thể đoán dễ dàng.
  • Không nên đặt mật khẩu là từ phổ biến dù bạn có thể dùng các từ trong trong cụm mật khẩu dài hơn.
  • Không nên đặt mật khẩu giống nhau cho nhiều tài khoản. Bạn có thể dùng một trình quản lý mật khẩu để tự động điền mật khẩu cho các trang khác nhau mà không cần phải ghi nhớ chúng.

Cách kiểm tra độ mạnh của mật khẩu bằng Python

Bạn có thể xây dựng một chương trình để kiểm tra độ mạnh của mật khẩu bằng cách kiểm tra các đặc điểm trên. Để làm việc này bạn cần hai mô đun: string và collections.

Bạn cũng có thể dùng mô đun getpass để ẩn mật khẩu khi người dùng nhập nó. Điều này giúp bảo vệ password khi bạn nhập nó công khai. Để cài đặt getpass trong môi trường cục bộ, mở terminal và nhập:

pip install getpass4

Bạn có thể dùng class String để kiểm tra một ký tự là chữ cái, con số hay biểu tượng. Bạn có thể dùng collection để kiểm tra xem có ký tự lặp lại trong password.

Dùng từ khóa def để định nghĩa một hàm tên check_password_strength() và chuyển mật khẩu bạn nhận được dưới dạng tham số cho nó.

Khởi tạo 6 biến: lower_alpha_count, upper_alpha_count, number_count, special_char_count, length, common sang 0. Chúng sẽ kiểm tra sự hiện diện của chữ viết thường, viết in hoa, số, ký tự đặc biệt, độ dài, lặp ký tự trong password.

Chuyển mật khẩu bạn có từ người dùng sang hàm list() để chuyển đổi nó thành một danh sách các ký tự. Dùng loop, lặp qua từng kỳ tự trong danh sách. Dùng lệnh if-else để kiểm tra ký tự là chữ viết thương, viết in hoa, số hay ký tự đặc biệt và cập nhật số lượng tương ứng.

Giả sử bất kỳ chữ trong bảng chữ cái hoặc số là một ký tự đặc biệt. Để tăng hạn chế, bạn có thể dùng ký tự đặc biệt dưới dạng chuỗi và kiểm tra xem liệu ký tự đó có xuất hiện trong password. Ngoài ra, một số web còn cho phép bạn dùng khoảng trắng trong mật khẩu. Bạn có thể đặt một biến khác và gia tăng nó hoặc xem xét dùng nó trong chính bộ đếm ký tự đặc biệt.

import string
import collections

def check_password_strength(password):
    lower_alpha_count = upper_alpha_count = number_count = special_char_count = length = common = 0

    for char in list(password):
        if char in string.ascii_lowercase:
            lower_alpha_count += 1
        elif char in string.ascii_uppercase:
            upper_alpha_count += 1
        elif char in string.digits:
            number_count += 1
        else:
            special_char_count += 1

Bạn sẽ cần một danh sách mật khẩu hoặc database để kiểm tra mật khẩu của người dùng có thông dụng hay không. Bạn có thể tải danh sách một triệu password phổ biến nhất từ SecLists's Common-Credential GitHub repository.

Lưu file text dưới dạng common_password_list.txt. Dùng lệnh with để xử lý ngoại lệ và mở file mật khẩu ở chế độ đọc. Dùng hàm read() để lấy nội dung hiện trong file và lưu nó trong một biến có tên là content.

Nếu password người dùng nhập vào không hiện ở danh sách password thông dụng, tăng 1 giá trị của biến thông dụng.

    with open("common_password_list.txt", 'r') as file:
        content = file.read()

        if password not in content:
            common += 1

Để kiểm tra độ dài của mật khẩu, chỉ cần chuyển nó sang hàm len() và kiểm tra xem nó lớn hơn hay bằng 12. Tăng giá trị của biến độ dài.

    if len(password) >= 12:
       length += 1 

Để kiểm tra độ lặp của các ký tự trong mật khẩu, dùng class phụ Counter từ Collections. Counter là một bộ sưu tập chưa được sắp xếp của các cặp key và value, trong đó key là một nhân tố còn value là số lượng của phần tử.

Dùng list comprehension để tạo một danh sách các ký tự trùng lặp từ từ điển bạn có bằng collections. Lặp lại từ điển và kiểm tra xem số lượng của ký tự có lớn hơn 1. Nếu số lượng lớn hơn, hãy nối nó vào một danh sách và lưu nó trong danh sách lặp.

    countOfWords = collections.Counter(password)
    repeated = [i for i in countOfWords if countOfWords[i] > 1]

Giờ bạn đã có các giá trị của từng đặc tính, khởi tạo một biến strength là 0. Đúng như tên gọi, bạn sẽ thấy biến này kiểm tra độ mạnh của mật khẩu. Hệ thống tính điểm nằm ngoài 7, một điểm cho mỗi lần bao gồm một ký tự và đặc tính của mật khẩu mạnh.

Kiểm tra số lượng của chữ viết thường, hoa, số và ký tự đặc biệt lớn hơn hay bằng một và tăng 1 độ mạnh của từng ký tự hiện có. Tương tự, kiểm tra xem liệu độ dài và biến chung có bằng một và độ dài của ký tự lặp lại có bằng 0. Nếu đúng, tăng giá trị của biến độ mạnh - strength.

    strength = 0

    if lower_alpha_count >= 1:
        strength += 1

    if upper_alpha_count >= 1:
        strength += 1

    if number_count >= 1:
        strength += 1

    if special_char_count >= 1:
        strength += 1

    if length == 1:
        strength += 1

    if common == 1:
        strength += 1

    if len(repeated) == 0:
        strength += 1

Dùng chuỗi đa dòng (3 trích dẫn) để hiện nhiều dòng văn bản trong một lệnh print. Dùng phép lặp nội suy Sring hoặc f-strings hay hiện số lượng các ký tự. Bạn có thể đạt được điều này bằng cách viết f ở phần đầu của chuỗi trong lệnh print và bao gồm các biến trong ngoặc nhọn. Ở đây dùng phép nội suy chuỗi bởi nội dung bên trong lệnh print là một chuỗi, nhưng giá trị của biến là một số nguyên.

    print(f"""Mật khẩu của bạn là:- 
    {lower_alpha_count} Chữ viết thường
    {upper_alpha_count} Chữ in hoa
    {number_count} Số
    {special_char_count} Ký tự đặc biệt
    {length} Độ dài
    {common} Phổ biến
    {repeated} Lặp lại
    "Password score: {strength}/7""")

Cuối cùng, dùng lệnh input để nhận password từ người dùng và chuyển nó sang hàm check_password_strength. Dựa trên độ mạnh của mật khẩu, chương trình này sẽ hiện điểm số cùng số lượng ký tự của mật khẩu.

password = input("Enter the password: ")
check_password_strength(password)

Kết quả của công cụ kiểm tra độ mạnh của mật khẩu

Khi nhập một mật khẩu mạnh dựa trên các đặc điểm được nhắc tới, chương trình Python hiện độ mạnh là 7/7:

Độ mạnh của mật khẩu

Khi nhập mật khẩu yếu và phổ biến, chương trình Python hiện strength là 1/7:

Công cụ kiểm tra mật khẩu bằng Python

Trên đây là cách viết chương trình kiểm tra password bằng Python. Hi vọng bài viết hữu ích với các bạn.

Thứ Bảy, 04/03/2023 11:37
51 👨 3.714
0 Bình luận
Sắp xếp theo
    ❖ Python