关于‘加盐’使得密码不被破解

-- 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’)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值