这里的原因是因为数据库中存储密码,如果直接存储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 = "注册成功")



















