flask项目1实战:2.4 用户密码处理(待完善)

在这里插入图片描述

(根据居然老师直播课内容整理)

一、密码加密介绍

  • 用户密码不能明文存放到数据库,需要加密处理后密文保存
  • 如果密码明文存放数据库,一旦数据库被攻破,不仅拿走用户信息,用户密码也就直接暴露了
  • 如果密码密文存放数据库,一旦数据库被攻破,虽然也拿走用户信息,不能直接知道用户密码,不需要花费一定时间去破解密码,才能登录上用户的帐号
  • 以前用的较多的是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)

猜你喜欢

转载自blog.csdn.net/laoluobo76/article/details/110441168
今日推荐