-- coding: utf-8 --
import hashlib, random
def get_md5(s):#确定返回字符串的函数,简化代码
return hashlib.md5(s.encode(‘utf-8’)).hexdigest()
class User(object):#生成一个类,用来储存哈希后的密码
def init(self, username, password):
self.username = username
self.salt = ‘’.join([chr(random.randint(48, 122)) for i in range(20)])#加盐,其中’ '.join表示后面的字符串以空格链接,random.randit(48,122)表示生成一个在48到122之间的随机数,chr表示将十进制返回字符
self.password = get_md5(password + self.salt)
db = {
‘michael’: User(‘michael’, ‘123456’),
‘bob’: User(‘bob’, ‘abc999’),
‘alice’: User(‘alice’, ‘alice2008’)
}#密码库
def login(username, password):
m=db[username]#将用户名与密码库进行对应,并去除密码库中的密码
l=get_md5(password+m.salt)#按照加盐规则对密码进行哈希化
if l==m.password: 哈希化后的密码与原密码进行比对
return True
else:
return False
测试:
assert login(‘michael’, ‘123456’)
assert login(‘bob’, ‘abc999’)
assert login(‘alice’, ‘alice2008’)
assert not login(‘michael’, ‘1234567’)
assert not login(‘bob’, ‘123456’)
assert not login(‘alice’, ‘Alice2008’)
print(‘ok’)