基础密码加密
Coddy 注册与登录系统项目 课程的第 7 课,共 8 课。
密码很危险。如果未经授权的人拿到你的密码,就可能对你的账户做坏事。为了防止这种情况,我们需要加密密码。
加密后的密码是转换成只有系统才能理解的秘密代码的密码。
例如,假设我的密码是 abc,我们来创建一种秘密语言:字母 a 实际上是字母 x,字母 b 实际上是字母 a,字母 c 实际上是字母 v:
a -> x
b -> c
c -> v 最后,我们加密后的密码是:xcv。我们就是这样把密码保存在系统中的。现在,如果有人成功入侵了我们的系统并窃取了所有保存的密码,他只能看到加密后的密码,这些密码对他来说毫无意义。
现在,当用户尝试登录系统时,他会输入自己的普通密码:abc,然后系统会将它转换为加密后的密码:xcv,并检查用户输入的加密密码是否与系统中保存的加密密码匹配。
注意:在现实生活中,绝不要使用这种加密方式!这种加密方式太弱,很容易被破解。
挑战
中等在初始化(__init__)系统时,创建一个名为 mapping 的 self 变量,用来存储加密映射:
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"
}创建一个名为 encrypt(self, password) 的方法,使用 mapping 字典返回加密后的密码。
最后,当有人尝试注册时,存储加密后的密码,而不是普通密码;当有人尝试登录时,进行必要的检查。
按以下步骤完成:
- 创建本挑战中给出的
mapping变量,并将它保存在类中的某处,以便通过encrypt方法访问它 - 创建
encrypt(self, password)方法,然后在接下来的步骤中使用它 - 注册用户时,将其密码作为加密后的密码保存在
users字典中 - 用户尝试登录时,先加密输入的密码,并检查它是否与
users字典中保存的密码匹配
亲手试试
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")注册与登录系统项目中的所有课
自己练习: Python 在线编译器