数据库 password 加密处理

我们直接开始
蓝色为标题,为代码,每一步更新代码,都会从第一步代码延续

首先,这是一个普通形式的数据库后台user表(已经用sqlalchemy映射到数据库了)
class CMSUser(db.Model):
    __tablename__ = 'cms_user'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    username = db.Column(db.String(50),nullable=False)
    password = db.Column(db.String(100),nullable=False)
    email = db.Column(db.String(50),nullable=False,unique=True)
    join_time = db.Column(db.DateTime,default=datetime.now)

此时我们的password密码内容,是明文展示的状态

之后,开始我们的加密处理

在这一步里,使用了 property 函数(作用:将方法属性化,使其可以被当做属性访问)
并更改密码字段,避免出现同名重复调用
class CMSUser(db.Model):
    __tablename__ = 'cms_user'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    username = db.Column(db.String(50),nullable=False)
    _password = db.Column(db.String(100),nullable=False)
    email = db.Column(db.String(50),nullable=False,unique=True)
    join_time = db.Column(db.DateTime,default=datetime.now)

    @property
    def password(self):
        return self._password

然后,我们需要使用flask中的一个加密函数 werkzeug 已经安装过可以直接转到④

① win+R 输入 cmd 打开命令指示符

②cd (此处一个空格) C:\Users\Administrator\AppData\Local\Programs\Python\Python37\(这一串是Python路径,根据自己情况输入)

③输入指令 pip install werkzeug 安装

④导入

此处导入两个,第一个用来加密,第二个用来检查

from werkzeug.security import generate_password_hash,check_password_hash

⑤使用该函数,并写出检查密码的方法(深色部分),用来判断是否正确

原理就是,将原本的密码 raw_password 加密,再传递给_password

检查同理,检查方法将取得的密码按同样方法加密一遍,与加密后的_password核对

 最后返回结果

class CMSUser(db.Model):
    __tablename__ = 'cms_user'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    username = db.Column(db.String(50),nullable=False)
    _password = db.Column(db.String(100),nullable=False)
    email = db.Column(db.String(50),nullable=False,unique=True)
    join_time = db.Column(db.DateTime,default=datetime.now)

    @property
    def password(self):
        return self._password

    @password.setter
    def password(self,raw_password):
        self._password = generate_password_hash(raw_password)

    def check_password(self,raw_password):
        result = check_password_hash(self.password,raw_password)
        return result

最后,做规范化整理,方便使用

加入深色部分,可以在项目其他位置,可以用 password 直接使用加密后的密码

class CMSUser(db.Model):
    __tablename__ = 'cms_user'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    username = db.Column(db.String(50),nullable=False)
    _password = db.Column(db.String(100),nullable=False)
    email = db.Column(db.String(50),nullable=False,unique=True)
    join_time = db.Column(db.DateTime,default=datetime.now)

    def __init__(self,username,password,email):
        self.username = username
        self.password = password
        self.email = email

    @property
    def password(self):
        return self._password

    @password.setter
    def password(self,raw_password):
        self._password = generate_password_hash(raw_password)

    def check_password(self,raw_password):
        result = check_password_hash(self.password,raw_password)
        return result

效果:重新添加数据后,密码已被加密

明文显示密码不可取

数据库内有用户更多信息

如果被攻击

危害不仅在单方面

  • 14
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值