MD5+salt密码保存方案

May 17, 2016


保留密码的方案

网站有多重保存密码的如下

  1. 明文保存
  2. 明文hash后保存,如md5
  3. MD5+Salt方式,这个salt可以随机
  4. 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

请参考,加密与加盐


上一篇博客:redefinition errors in Win32_FDAPI.h
下一篇博客:Coroutine学习笔记