一、密码加密介绍
- 用户密码不能明文存放到数据库,需要加密处理后密文保存
- 如果密码明文存放数据库,一旦数据库被攻破,不仅拿走用户信息,用户密码也就直接暴露了
- 如果密码密文存放数据库,一旦数据库被攻破,虽然也拿走用户信息,不能直接知道用户密码,不需要花费一定时间去破解密码,才能登录上用户的帐号
- 以前用的较多的是MD5,不可逆的加密算法。MD5加密有个特点:密码加密之后密文就固定了,如果有人把常用密码的MD5加密密文都保存到数据库,就相当于密码是相对公开的了,所以MD5加密不是被破解了,是被变相的破解了。
- 现在一般不直接用MD5加密,采用MD5+ salt(盐),相当于MD5+随机字符串,提高破解难度,也不特别安全
- 现在一般用 sha1 sha256,相当于把MD5 和 盐都保存起来了,更难被破解
- 密码加密算法一般都写在 user模型里面
二、密码加密实现
- 这里采用flask提供的密码加密算法 werkzeug.security.generate_password_hash 和check_password_hash
1、修改user类,增加密码加密方法
- 对密码明文加密后,直接修改类的属性password_hash
def passwd_hash(self,origin_password):
'''对密码进行加密'''
self.password_hash=generate_password_hash(origin_password)
2、调用
- 直接调用user类的方法
user.passwd_hash(password)
3、利用装饰器进行优化
3 .1 密码加密方法优化
- 利用装饰器对密算法进行优化
@property
def password(self):
"""读取属性的方法"""
# return self.password_hash # 该属性不应调用,调用抛出异常
raise AttributeError('这个属性只能设置,不能读取')
@password.setter
def password(self, value):
"""设置属性"""
# 调用方法 user.password = password
self.password_hash = generate_password_hash(value)
3.2 调用优化
user.password = password
三、密码校验实现
- 采用flask提供的密码加密算法 check_password_hash方法实现密码校验
1、修改user类,增加密码加密方法
# loghome/models.py
def check_pwd_hash(self, password):
"""验证密码的正确性"""
# check_password_hash(密文, 明文)
return check_password_hash(self.password_hash, password)
2、调用方法
user.check_pwd_hash(password)
原文地址:https://blog.csdn.net/laoluobo76/article/details/110441168
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。