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快速排序代码实例
Nov 21 Python
python解析基于xml格式的日志文件
Feb 25 Python
Python2/3中urllib库的一些常见用法
Dec 19 Python
Python进阶之递归函数的用法及其示例
Jan 31 Python
python selenium自动上传有赞单号的操作方法
Jul 05 Python
Python爬虫框架Scrapy常用命令总结
Jul 26 Python
Python爬虫实现爬取百度百科词条功能实例
Apr 05 Python
Python中Numpy mat的使用详解
May 24 Python
Python OpenCV之图片缩放的实现(cv2.resize)
Jun 28 Python
利用python3 的pygame模块实现塔防游戏
Dec 30 Python
Pycharm中切换pytorch的环境和配置的教程详解
Mar 13 Python
如何在python中处理配置文件代码实例
Sep 27 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中的密码加密的解决方案总结
2016/10/26 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
ASP.NET jQuery 实例3 (在TextBox里面阻止复制、剪切和粘贴事件)
2012/01/13 Javascript
jquery(hide方法)隐藏指定元素实例
2013/11/11 Javascript
实现无刷新联动例子汇总
2015/05/20 Javascript
使用JavaScript刷新网页的方法
2015/06/04 Javascript
基于jQuery实现Ajax验证用户名是否存在实例
2016/03/30 Javascript
vue-hook-form使用详解
2017/04/07 Javascript
fullPage.js和CSS3实现全屏滚动效果
2017/05/05 Javascript
使用JavaScript实现alert的实例代码
2017/07/06 Javascript
JS立即执行函数功能与用法分析
2019/01/15 Javascript
小程序开发踩坑:页面窗口定位(相对于浏览器定位)(推荐)
2019/04/25 Javascript
Vue-CLI项目中路由传参的方式详解
2019/09/01 Javascript
关于Js中new操作符的作用详解
2021/02/21 Javascript
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
Python实现控制台输入密码的方法
2015/05/29 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
2016/02/18 Python
python 2.7.14安装图文教程
2018/04/08 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
2018/12/12 Python
PyCharm 2019.3发布增加了新功能一览
2019/12/08 Python
python 检测图片是否有马赛克
2020/12/01 Python
迪卡侬波兰体育用品商店:Decathlon波兰
2020/03/31 全球购物
编写一子程序,将一链表倒序,即使链表表尾变表头,表头变表尾
2016/02/10 面试题
中间件的定义
2016/08/09 面试题
新闻专业大学生找工作的自我评价
2013/10/30 职场文书
土木工程个人自荐信范文
2013/11/30 职场文书
白岩松演讲
2014/05/21 职场文书
2014年世界艾滋病日演讲稿
2014/11/28 职场文书
2014幼儿园班主任工作总结
2014/12/04 职场文书
离婚协议书范文2014(夫妻感情破裂)
2014/12/14 职场文书
幼儿园校车安全责任书
2015/05/08 职场文书
赢在中国观后感
2015/06/02 职场文书
雷锋之歌观后感
2015/06/10 职场文书
公共场所卫生管理制度
2015/08/05 职场文书
高二语文教学反思
2016/02/16 职场文书
《生物入侵者》教学反思
2016/02/16 职场文书