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á.
Thử thách
Trung bìnhTạ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ứcencrypt - 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
usershay 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
Tự luyện tập: Trình biên dịch Python online