密码md5 - 加盐salt
用户 --> 相同的密码 --> 不同的md5 hash()值 -- >加点 salt
例如:库中的数据
{"id": 1000, "password": "5715073b5c60542dd47d0c11966e0621", "salt": "q<h5pL+_", "balance": 99251.66, "credit": 123.0, "enroll_date": "2018-03-06", "expire_date": "2050-1-1", "pay_day": 22, "status": 1}
1 def set_salt(): 2 # 每个用户的salt值不一样 库中的password就不一样 3 salt = ''.join(random.sample(string.digits + string.ascii_letters + string.punctuation, 8)) # 随机的8位盐 使得相同的密码 也有不同md5()值 4 md5_value = md5() 5 md5_value.update(b'123' + salt.encode('utf-8')) 6 return salt, md5_value.hexdigest()
规则:
用户注册时:
用户输入【账号】和【密码】(以及其他用户信息);
系统为用户生成【Salt值】;
系统将【Salt值】和【用户密码】连接到一起;
对连接后的值进行散列,得到【Hash值】;
将【Hash值1】和【Salt值】分别放到数据库中。
用户登录时:
用户输入【账号】和【密码】;
系统通过用户名找到与之对应的【Hash值】和【Salt值】;
系统将【Salt值】和【用户输入的密码】连接到一起;
对连接后的值进行散列,得到【Hash值2】(注意是即时运算出来的值);
比较【Hash值1】和【Hash值2】是否相等,相等则表示密码正确,否则表示密码错误。