Menu
CoddyTech

Mã hóa mật khẩu cơ bản

Bài học 7 trên 8 trong khóa học Dự án hệ thống đăng ký và đăng nhập của Coddy.

Mật khẩu rất nguy hiểm. Nếu người không có quyền truy cập lấy được mật khẩu của bạn, họ có thể làm những việc gây hại cho tài khoản. Để ngăn người khác làm những việc như vậy, chúng ta cần mã hóa mật khẩu.

Mật khẩu đã mã hóa là mật khẩu được chuyển thành một mã bí mật mà chỉ hệ thống mới hiểu được. 

Ví dụ, giả sử mật khẩu của mình là abc và mình tạo một ngôn ngữ bí mật: chữ cái a thực ra là chữ cái x, chữ cái b thực ra là chữ cái a, còn chữ cái c thực ra là chữ cái v:

a -> x
b -> c
c -> v 

Cuối cùng, mật khẩu đã mã hóa của chúng ta là: xcv. Đây là cách chúng ta lưu mật khẩu trong hệ thống. Nếu ai đó xâm nhập được vào hệ thống và đánh cắp toàn bộ mật khẩu đã lưu, họ sẽ chỉ tìm thấy những mật khẩu đã mã hóa, vốn chẳng có ý nghĩa gì với họ.

Khi người dùng đăng nhập vào hệ thống, họ sẽ nhập mật khẩu thông thường: abc. Sau đó, hệ thống sẽ chuyển mật khẩu thành dạng đã mã hóa: xcv, rồi kiểm tra xem mật khẩu đã mã hóa mà người dùng nhập có khớp với mật khẩu đã mã hóa được lưu trong hệ thống hay không.

Lưu ý: Đừng bao giờ dùng kiểu mã hóa này trong thực tế! Kiểu mã hóa này quá yếu và dễ bị phá.

challenge icon

Thử thách

Trung bình

Tạo một biến self tên là mapping khi khởi tạo hệ thống trong __init__ để lưu ngôn ngữ mã hóa:

mapping = {
   "a" : "i", "b" : "l", "c" : "q", "d" : "f", "e" : "z", "f" : "s",
   "g" : "a", "h" : "g", "i" : "e", "j" : "p", "k" : "w", "l" : "o",
   "m" : "v", "n" : "u", "o" : "b", "p" : "j", "q" : "k", "r" : "n",
   "s" : "x", "t" : "d", "u" : "h", "v" : "y", "w" : "t", "x" : "m",
   "y" : "r", "z" : "c"
}

Tạo một phương thức (method) tên là encrypt(self, password) để trả về mật khẩu đã mã hóa bằng từ điển mapping.

Cuối cùng, khi có người đăng ký, hãy lưu mật khẩu đã mã hóa thay vì mật khẩu thông thường. Khi có người đăng nhập, hãy thực hiện bước kiểm tra cần thiết.

Để thực hiện, hãy làm theo các bước sau:

  • Tạo biến mapping được cung cấp trong thử thách này và lưu biến đó ở đâu đó trong lớp để bạn có thể truy cập thông qua phương thức encrypt
  • Tạo phương thức encrypt(self, password), sau đó dùng phương thức này cho các bước tiếp theo
  • Khi đăng ký người dùng, hãy lưu mật khẩu của họ dưới dạng mật khẩu đã mã hóa trong từ điển users
  • Khi người dùng đăng nhập, hãy mã hóa mật khẩu đầu vào được cung cấp và kiểm tra xem mật khẩu đó có khớp với mật khẩu đã lưu trong từ điển users hay không

Tự làm thử

class LoginSystem:
    def __init__(self):
        self.users = {}
        self.logged_users = set()
    
    def register(self, username, password):
        if username not in self.users:
            self.users[username] = password
            print("user registered successfuly")
        else:
            print("user already exists")
    
    def login(self, username, password):
        if username in self.users:
            if password == self.users[username]:
                self.logged_users.add(username)
                print("user logged in successfully")
            else:
                print("password doesn't match")
        else:
            print("user isn't in the system")
    
    def sign_out(self, username):
        if username not in self.users:
            print("user is not in the system")
        elif username not in self.logged_users:
            print("user is not logged in")
        else:
            self.logged_users.remove(username)
            print("user signed out successfully")

Tất cả bài học trong Dự án hệ thống đăng ký và đăng nhập

1Bắt đầu từ con số không

Giới thiệuCách sử dụng tập hợp

3Mã hóa

Mã hóa mật khẩu cơ bảnBài học dự ánLời kết

Tự luyện tập: Trình biên dịch Python online