保留密码的方案
网站有多重保存密码的如下
- 明文保存
- 明文hash后保存,如md5
- MD5+Salt方式,这个salt可以随机
- Bcrypy(+salt)加密
如果直接明文保存密码,极不安全,传输过程,容易被拦截,数据库一旦被脱裤,就完蛋了。
如果直接hash呢?如md5,这也存在被爆掉的风险,另外如果破解一个密码,就破解了一批密码一样的账户。
而增加salt就更安全了,增加salt的方法一般只有网站编码人员知道,salt值也可以是随机的。
下面介绍两种salt的方法,第一种是实际项目中用到的,第二种仅作了解。
MD5+Salt的方案Demo
简单实用,方案流程,前端传递经过MD5后的密码,然后经过generate_salt_passwd
拼接上salt值,然后存储到数据库中:
本方法中salt值,是根据hash(user)值来生成随机数,然后根据随机数的大小,添加指定位数的’1’.
注:对同一个用户,其实随机数是固定的,因此salt值也是固定的;此处的passwd是前端传递过来的经过md5之后的密码。
generate_salt(user):
'''add salt'''
random.seed(hash(user))
r = random.randint(1,10000)
if r < 10:
r = '111' + str(r)
elif r < 100:
r = '11' + str(r)
elif r < 1000:
r = '1' + str(r)
return r
generate_salt_passwd(user, passwd):
'''return md5 + salt'''
r = generate_salt(user)
return passwd + str(r)
Bcrypt加密+Salt
请参考,加密与加盐