这里的原因是因为数据库中存储密码,如果直接存储md5安全性还并不是高。
一般会在表中增加salt,也就是加点盐,和真实密码进行某种聚合。也就是:
数据库中的密码=随机密码+用户输入的密码,进行某种算法聚合的
如下数据库中的表:
这个login_salt就是和真实密码聚合然后把杂交后的密码放到login_pwd中。
生成login_salt相关代码如下:
和真实密码混合生成的最后存储到数据库的字符串:
相关代码如下:
import random, string, hashlib, base64
class UserService:
@staticmethod
def genePwd(pwd, salt):
m = hashlib.md5() #获得md5算法对象
str = "%s-%s" % (base64.encodebytes(pwd.encode("utf-8")), salt)
m.update(str.encode("utf-8"))
return m.hexdigest()
@staticmethod
def geneSalt(length = 16):
keyList = [random.choice(string.ascii_letters + string.digits) for i in range(length)]
return "".join(keyList)
controller端相关代码:
@member_page.route("/reg", methods = ["GET", "POST"])
def reg():
if request.method == "GET":
return render_template("member/reg.html")
req = request.values
nickname = req['nickname'] if "nickname" in req else ""
login_name = req['login_name'] if "login_name" in req else ""
login_pwd = req['login_pwd'] if "login_pwd" in req else ""
login_pwd2 = req['login_pwd2'] if "login_pwd2" in req else ""
......
......
......
model_user = User()
model_user.login_name = login_name
model_user.nickname = nickname if nickname is not None else login_name
model_user.login_salt = UserService.geneSalt(8)
model_user.login_pwd = UserService.genePwd(login_pwd,model_user.login_salt)
model_user.created_time = model_user.updated_time = getCurrentTime()
db.session.add(model_user)
db.session.commit()
return ops_renderJSON(msg = "注册成功")