Flask框架中密码的加盐哈希加密和验证功能的用法详解


Posted in Python onJune 07, 2016

密码加密简介
密码存储的主要形式:

  • 明文存储:肉眼就可以识别,没有任何安全性。
  • 加密存储:通过一定的变换形式,使得密码原文不易被识别。

密码加密的几类方式:

  • 明文转码加密:BASE64, 7BIT等,这种方式只是个障眼法,不是真正的加密。
  • 对称算法加密:DES, RSA等。
  • 签名算法加密:也可以理解为单向哈希加密,比如MD5, SHA1等。加密算法固定,容
  • 易被暴力破解。如果密码相同,得到的哈希值是一样的。
  • 加盐哈希加密:加密时混入一段“随机”字符串(盐值)再进行哈希加密。即使密码相同,如果盐值不同,那么哈希值也是不一样的。现在网站开发中主要是运用这种加密方法。
  • 密码生成函数:generate_password_hash

函数定义:

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

generate_password_hash是一个密码加盐哈希函数,生成的哈希值可通过
check_password_hash()进行验证。

哈希之后的哈希字符串格式是这样的:

method$salt$hash

参数说明:

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

密码生成示例:

>>> from werkzeug.security import generate_password_hash
>>> print generate_password_hash('123456')
'pbkdf2:sha1:1000$X97hPa3g$252c0cca000c3674b8ef7a2b8ecd409695aac370'

因为盐值是随机的,所以就算是相同的密码,生成的哈希值也不会是一样的。

密码验证函数:check_password_hash
函数定义:

werkzeug.security.check_password_hash(pwhash, password)

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

参数:

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

密码验证示例:

>>> from werkzeug.security import check_password_hash
>>> pwhash = 'pbkdf2:sha1:1000$X97hPa3g$252c0cca000c3674b8ef7a2b8ecd409695aac370'
>>> print check_password_hash(pwhash, '123456')
True

举例说明

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)

下面来看看是怎么工作的:

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

小结
上面就是密码生成和验证的方法,一般来说,默认的加密强度已经足够了,如果需
要更复杂的密码,可以加大盐值长度和迭代次数。

Python 相关文章推荐
Python中splitlines()方法的使用简介
May 20 Python
Python实现读取并保存文件的类
May 11 Python
Python调用微信公众平台接口操作示例
Jul 08 Python
Python使用ConfigParser模块操作配置文件的方法
Jun 29 Python
Python实现的读取/更改/写入xml文件操作示例
Aug 30 Python
解决python3 安装完Pycurl在import pycurl时报错的问题
Oct 15 Python
详解Python安装tesserocr遇到的各种问题及解决办法
Mar 07 Python
python set内置函数的具体使用
Jul 02 Python
正则给header的冒号两边参数添加单引号(Python请求用)
Aug 09 Python
Pandas实现DataFrame按行求百分数(比例数)
Dec 27 Python
django中url映射规则和服务端响应顺序的实现
Apr 02 Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
Apr 21 Python
Python的Flask框架应用程序实现使用QQ账号登录的方法
Jun 07 #Python
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
Jun 07 #Python
Windows上使用virtualenv搭建Python+Flask开发环境
Jun 07 #Python
在Python的Flask中使用WTForms表单框架的基础教程
Jun 07 #Python
详解Python的Flask框架中生成SECRET_KEY密钥的方法
Jun 07 #Python
Python的Flask框架中配置多个子域名的方法讲解
Jun 07 #Python
python3批量删除豆瓣分组下的好友的实现代码
Jun 07 #Python
You might like
php随机取mysql记录方法小结
2014/12/27 PHP
PHP实现XML与数据格式进行转换类实例
2015/07/29 PHP
PHP指定截取字符串中的中英文或数字字符的实例分享
2016/03/18 PHP
php生成微信红包数组的方法
2019/09/05 PHP
jquery ajax jsonp跨域调用实例代码
2013/12/11 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
浅析jQuery Ajax通用js封装
2016/06/22 Javascript
微信小程序 定位到当前城市实现实例代码
2017/02/23 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
2017/08/19 jQuery
在微信小程序中渲染HTML内容的方法示例
2018/09/28 Javascript
JS如何实现动态添加的元素绑定事件
2019/11/12 Javascript
vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)
2020/02/11 Javascript
如何通过Proxy实现JSBridge模块化封装
2020/10/22 Javascript
原生js实现弹幕效果
2020/11/29 Javascript
python下调用pytesseract识别某网站验证码的实现方法
2016/06/06 Python
Python中turtle作图示例
2017/11/15 Python
Python3实现发送QQ邮件功能(html)
2017/12/15 Python
Flask框架工厂函数用法实例分析
2019/05/25 Python
python实现倒计时小工具
2019/07/29 Python
Python 导入文件过程图解
2019/10/15 Python
python实现简单学生信息管理系统
2020/04/09 Python
goodhealth官方海外旗舰店:新西兰国民营养师
2017/12/15 全球购物
英国泽西岛植物:Jersey Plants Direct
2019/08/07 全球购物
护士演讲稿范文
2014/01/05 职场文书
安全生产先进个人材料
2014/02/06 职场文书
爱护公共设施倡议书
2014/08/29 职场文书
2014年镇党建工作汇报材料
2014/11/02 职场文书
岗位竞聘报告范文
2014/11/06 职场文书
先进单位申报材料
2014/12/25 职场文书
反腐倡廉观后感
2015/06/08 职场文书
Windows下redis下载、redis安装及使用教程
2021/06/02 Redis
Python编写冷笑话生成器
2022/04/20 Python
MyBatis XPathParser解析器使用范例详解
2022/07/15 Java/Android