# 定义ge_md5()函数,用于获取密码的MD5值
def get_md5(s): #输入的变量s必须是str格式,否则会报错 return hashlib.md5(s.encode('utf-8')).hexdigest() #'abc'.encode('utf-8')相当于b'abc'
# 定义User类,再通过新建类实例对象的属性来储存用户密码和salt信息
class User(object): def __init__(self, username, password): self.username = username #其实在下面的代码中看username属性没啥用,可以去掉 self.salt = ''.join([chr(random.randint(48, 122)) for i in range(20)]) #随机生成一个长度20的字符串,作为salt self.password = get_md5(password + self.salt) #数据库中储存的是密码连接salt后的字符串的MD5加密数据 # 在注册db信息的时候,调用了User(username, password)来储存用户信息,即用户密码是用户的password属性 db = { 'michael': User('michael', '123456'), 'bob': User('bob', 'abc999'), 'alice': User('alice', 'alice2008') }
# 登陆验证函数login(), 返回Ture/False. 其中密码格式必须是str格式,否则报错,用户名如果找不到也会报错
def login(username, password): if isinstance(password, str): #检查密码是否是str格式 try: user = db[username.lower()] #在dict格式的db中查找该用户的类实例数据 return user.password == get_md5(password + user.salt) #如果实例属性password和计算出来的MD5值一样则返回Ture, 否则False except KeyError: #如果找不到用户会报错 print('User <%s> is Not Found' % username) else: print('Wrong input format')
Sign in to make a reply
采蘑菇的lucas_688
# 定义ge_md5()函数,用于获取密码的MD5值
# 定义User类,再通过新建类实例对象的属性来储存用户密码和salt信息
# 登陆验证函数login(), 返回Ture/False. 其中密码格式必须是str格式,否则报错,用户名如果找不到也会报错