参考博客:https://segmentfault.com/a/1190000002393218
一、利用python自带的hashlib库实现加密
1、SHA1加密

python中的用法:

>>> import hashlib
>>> data = '123456'
>>> temp = hashlib.sha1(data)
>>> temp.hexdigest()
'7c4a8d09ca3762af61e59520943dc26494f8941b'

1
    2
    3
    4
    5
    6

flask中的用法:

import hashlib

# 注册网页
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'GET': # 浏览器访问
        return render_template('main/ssb_login.html')
    if request.method == 'POST': # form提交处理逻辑
        username = request.form['username']
        pwd_temp = hashlib.sha1(request.form['password'])# sha1哈希加密
        password = pwd_temp.hexdigest()# sha1哈希加密
        checkcode = request.form['checkcode']
        if isNameExist(username): # 用户名已经存在
            return 'nameisexisted'
        elif not isCheckCode(checkcode): # 验证码不正确
            return 'checkcodeerror'
        else:
            setNewAdmin(username, password,checkcode)
            return 'success'

1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20

2、MD5加密

Python中用法:

>>> import hashlib
>>> data = '123456'
>>> temp = hashlib.md5(data)
>>> temp.hexdigest()
'e10adc3949ba59abbe56e057f20f883e'

1
    2
    3
    4
    5

flask中的用法:

import hashlib

# 注册网页
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'GET': # 浏览器访问
        return render_template('main/ssb_login.html')
    if request.method == 'POST': # form提交处理逻辑
        username = request.form['username']
        pwd_temp = hashlib.md5(request.form['password'])# MD5加密
        password = pwd_temp.hexdigest()# MD5加密
        checkcode = request.form['checkcode']
        if isNameExist(username): # 用户名已经存在
            return 'nameisexisted'
        elif not isCheckCode(checkcode): # 验证码不正确
            return 'checkcodeerror'
        else:
            setNewAdmin(username, password,checkcode)
            return 'success'

1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20

二、利用Flask中的werkzeug.security模块加密

 这个模块中主要是利用到两个函数:

(1)密码生成函数:generate_password_hash
    (2)密码验证函数:check_password_hash

1、密码生成函数:generate_password_hash

函数定义:

werkzeug.security.generate_password_hash(password, method='pbkdf2:sha1', salt_length=8)

1

参数说明:

password:明文密码
    method:哈希加密的方法(需要hashlib库支持的),格式为pdpdf2:<method>[:iterations]
        method:哈希的方式,一般为SHA1
        iterations:(可选参数)迭代次数,默认为1000
    salt_length:盐值的长度,默认为8

加密之后的字符串格式:

method$salt$hash

1
    2

2、密码验证函数:check_password_hash

函数定义:

werkzeug.security.check_password_hash(pwhash, password)

1

参数定义:

pwhash:generate_password_hash生成的哈希字符串
    password:需要验证的明文密码

 check_password_hash函数用于验证经过generate_password_hash哈希的密码
。若密码匹配,则返回真,否则返回假。
用法:

OOP用法:

from werkzeug.security import generate_password_hash,check_password_hash

class User(object):

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

def set_password(self, password):
        self.pw_hash = generate_password_hash(password)

def check_password(self, password):
        return check_password_hash(self.pw_hash, password)

1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

>>> me = User('John Doe', 'default')
>>> me.pw_hash
'sha1$Z9wtkQam$7e6e814998ab3de2b63401a58063c79d92865d79'
>>> me.check_password('default')
True
>>> me.check_password('defaultx')
False

1
    2
    3
    4
    5
    6
    7

通常用法:

#哈希加盐的密码加密方法
def enPassWord(password):#将明密码转化为hash码
    return generate_password_hash(password)#返回转换的hash码

def checkPassWord(enpassword,password):#第一参数是从数据查询出来的hash值,第二参数是需要检验的密码
    return check_password_hash(enpassword,password)#如果匹配返回true

1
    2
    3
    4
    5
    6

#注册新用户
@main.route('/register', methods=['GET', 'POST'])
def register():
    if request.method == 'GET':
        return render_template("user/register.html")
    if request.method == 'POST':
        u = request.form['username']
        p = enPassWord(request.form['password'])
        email = request.form['email']
        addUser(u,p,email)
        return redirect('/signin')#注册完之后进入登录页面

#登录用户
@main.route('/signin', methods=['GET', 'POST'])
def signin():
    if request.method == 'GET':
        return render_template("user/login.html")
    if request.method == 'POST':
        u = request.form['username']
        p = request.form['password']
        if isNameExisted(u):
            t = checkPassword(u);#获得数据库存储的hash值
            if check_password_hash(t,p):#查询有没有这个用户
                session['logged_in'] = True
                return redirect('/user/blog')
        else:#没有用户就是新用户那么就转入注册页面
            return redirect('/register')
--------------------- 
作者:liefyuan 
来源:CSDN 
原文:https://blog.csdn.net/qq_28877125/article/details/76176883 
版权声明:本文为博主原创文章,转载请附上博文链接!

Flask成长笔记--在Flask中加密的方式相关推荐

  1. 用户密码在后台数据库中加密存储方式

    常见的用户密码在后台数据库中加密存储方式 如何安全的存储用户密码 常见登录密码加密方式 JavaScript逆向实战:admin加密成WaQ7xbhc9TefbwK是什么加密算法?逆向思维考验.详细流 ...

  2. Flask成长笔记--依赖包操作

    参考博客:http://blog.csdn.net/ying847782627/article/details/51221697  部署程序时使用的电脑. pip 可以使用如下命令自动生成这个文件: ...

  3. 【flask学习笔记】flask与HTTP,flask与mongodb交互,用手机输入局域网ip访问flask界面

    文章目录 引入(关于http) flask项目的配置 引入(关于http) 当我们在浏览器中的地址栏中输入这个URL,然后按下Enter时,稍等片刻,浏览器会显示一个问候页面.这背后有一个程序运行着. ...

  4. 常见的用户密码在后台数据库中加密存储方式

    转载自:https://blog.csdn.net/ctrip_tech/article/details/80125741 一.用户密码加密 用户密码保存到数据库时,常见的加密方式有哪些,我们该采用什 ...

  5. Flask学习笔记总结(一)

    Flask学习笔记总结(一) 说明:开始在csdn上面记录一些关于自己学习技术的笔记总结. 文章目录 Flask学习笔记总结(一) 前言 一.python的web三大框架 二.flask入门 1.ws ...

  6. 千锋Flask学习笔记

    千锋Flask学习笔记 文章目录 千锋Flask学习笔记 写在前面 1. Flask介绍 2. Views 3. Request 4. Response 5. 会话技术 6. 模型和模板 7. 数据传 ...

  7. Flask学习笔记(四): Flask与数据库连接

    Flask学习笔记(四): Flask与数据库连接 前言 前面我们学习了Flask如何构建一个程序的流程,又研究了它的路由如何设定,还对如何获取模板表单数据进行了梳理,值得一提的就是Flask和SQL ...

  8. Flask学习笔记:错误处理

    1. 做好准备工作 进入项目主目录 激活虚拟环境 2. Flask中的错误处理 登陆账号,点开编辑资料页面,试着将用户名改为一个已经存在的用户名,然后,你会看到屏幕显示"Internal S ...

  9. Flask后端笔记(二)request、bort、响应、session、钩子

    Flask后端笔记 获取请求参数 上传文件 _with的使用 bort函数与自定义异常处理 abort函数 自定义异常处理 返回的响应数据 元组 make_response json模块的使用 使用j ...

最新文章

  1. lvs(+keepalived)、haproxy(+heartbeat)、nginx 负载均衡的比较分析
  2. golang 随机数 math/rand包 crypto/rand包
  3. yapi 插件_强大的开源API接口可视化管理平台——YAPI
  4. [转载]jquery cookie的用法
  5. Netty使用kryo序列化传输对象
  6. 13.程序员的自我修养---运行库实现
  7. numpy库学习总结
  8. 惠普803墨盒清零步骤_打印机惠普7110墨盒清零的方法
  9. AI人工智能概念(机器学习,深度学习,强化学习)
  10. 华为网络设备查看风扇状态命令
  11. BZOJ 5109: [CodePlus 2017]大吉大利,晚上吃鸡! 最短路 拓扑 Dp
  12. Krpano元素的一些解析
  13. matlab弹奏旋律(发声)笔记
  14. docker基础操作
  15. Backpack VI
  16. ubuntu下安装Realtek usb无线网卡驱动(8821cu)
  17. 采用最大连通域算法对三维医学图像分割结果做后处理
  18. 华为与「DaoCloud 道客」推出面向元宇宙的云边协同超融合一体机
  19. 【算法分析】Lucas–Kanade光流算法
  20. finalcut剪切快捷键_Final Cut Pro 中的键盘快捷键

热门文章

  1. 给Android SDK设置环境变量
  2. 微软的新一代web开发工具 - WebMatrix2
  3. (libgdx学习)InputProcessor InputMultiplexer
  4. JavaScript设计模式第一弹-创建型设计模式
  5. 软路由OpenWrt教程收集(插件开发教程,opkg安装软件教程)
  6. go语言net包rpc远程调用的使用
  7. c++矩阵运算库Eigen简介
  8. Android — 创建和修改 Fragment 的方法及相关注意事项
  9. Matlab中的函数句柄@
  10. encodeURIcomponent编码和ASP.NET之间编码转换