虽然MD5加盐加密挺流行的,但是据说hash加盐加密是无法破解的。
那么我们就看看flask当中是这么使用哈希加密和验证的。
from werkzeug.security import generate_password_hash
# 生成密码
hash = generate_password_hash('xiaoshen')
print(hash)
from werkzeug.security import check_password_hash
# 检查密码
print(check_password_hash(hash, 'ereg'))
print(check_password_hash(hash, 'xiaoshen'))
为了在flask当中使用更方便,数据库定义具体如下:
class Users(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
username = Column(String(32))
_password_hash_ = Column(String(256)) # 加下划线作为私有函数,无法被外部访问。
@property
def password(self):
raise Exception('密码不能被读取') #为了保持使用习惯,还是设置一个password字段用来设置密码,当然也不能被读取。
# 赋值password,则自动加密存储。
@password.setter
def password(self, value):
self._password_hash_ = generate_password_hash(value)
# 使用check_password,进行密码校验,返回True False。
def check_password(self, pasword):
return check_password_hash(self._password_hash_, pasword)
# 新增用户
new = Users(username='jack', password='xiaobao')
db_session.add(new)
db_session.commit()
# 查询用户
tag = Users.query.filter(Users.username='jack').first()
print(tag.check_password('xiaobao'))
``
|