tornado用户密码 bcrypt加密

简介

bcrypt 可以通过加盐的方式对密码进行加密,更加的安全可靠。

优点

md5加密,每个对应的明文密码,对应的是一样的加密的密文,比较容易的进行解密。而bcrypt每一次的明文密码得到的是不同的加密的密文,因为密文是通过随机的盐结合加密,所以更加安全。

tornado使用bcrypt 加密密码

在utils目录新建encryption.py文件

from bcrypt import hashpw, gensalt


# 加密
def passwd_encryption(pwd, passwd=None, is_encrypt=True):
    if is_encrypt:
        # 这个是随机生成的盐
        salt = gensalt(12)

        # 这个是通过盐去加密
        passwd = hashpw(pwd.encode('utf8'), salt)
        return passwd
    else:
        # 将输入的明文密码与密文密码进行加密,是否等于密文密码。
        return hashpw(pwd.encode('utf8'), passwd.encode('utf8'))

在users.py文件里面把它导入过来

import tornado.web
import re
from models.auth import User
from utils.account import passwd_encryption
from handlers.main import BaseHandler

class RegisterHandler(tornado.web.RequestHandler):
    '''
    注册
    '''
    def get(self):
        return self.render('register.html')

    def post(self):
        # 1.获取前端参数
        username = self.get_argument('username', '').strip()
        password = self.get_argument('password', '').strip()
        repeat_password = self.get_argument('repeat_password', '').strip()

        # 2.校验参数

        # 判断是否为空
        if not all([username, password, repeat_password]):
            return self.write('参数错误')

        # 判断格式
        if not(re.match('^\w{6,20}$', username) and password == repeat_password):
            return self.write('格式错误')

        # 判断用户是否已存在
        if User.check_username(username):
           return self.write('用户名已存在')

        # 密码加密
        passwd = passwd_encryption(password)

        # 3.入库
        User.add_user(username, passwd)  # 保存user数据

        # 4.返回数据给前端
        return self.write('注册成功')







class LoginHandler(BaseHandler):
    '''
    登录
    '''

    def get(self):
        return self.render('login.html')

    def post(self):
        # 1.获取用户名和密码
        username = self.get_argument('username', '').strip()
        password = self.get_argument('password', '').strip()
        if username and password:
            # 2.判断密码是否正确
            user = User.check_username(username)  # 获取用户实例
            passwd = user.password if user else ''  # 数据库中已经加密的密码
            if passwd_encryption(password, passwd, False) == passwd.encode('utf8'):
                self.session.set('user', username)
                next = self.get_argument('next', '/')  # 获取需登录前一个页面路由
                return self.redirect(next)  # 重定向到登录前一个页面

            else:
                return self.write('用户名或密码错误')
        else:
            self.write('参数错误')

        # 3.设置会话
        pass

猜你喜欢

转载自www.cnblogs.com/nanamiyi/p/12939321.html
今日推荐