内容简介:开发网站离不开用户的注册与登录,今天来说说在网站开发的时候关于用户密码的保存方式,传统的方式有以下几种本篇文章主要介绍第四种 「加盐哈希加密」Werkzeug是一个WSGI工具包,他可以作为一个Web框架的底层库。但是 werkzeug 不是一个 web 服务器,也不是一个 web 框架,而是一个工具包,因为它封装好了很多 Web 框架的东西,例如 Request,Response 等等,大名鼎鼎的Flask就是基于werkzeug开发的。
开发网站离不开用户的注册与登录,今天来说说在网站开发的时候关于用户密码的保存方式,传统的方式有以下几种
- 明文存储:肉眼就可以识别,没有任何安全性。 谁用谁傻缺
- 加密存储:通过一定的变换形式,使得密码原文不易被识别。密码加密的几类方式:
-
明文转码加密:BASE64, 7BIT等,这种方式只是个障眼法,不是真正的加密。
-
对称算法加密:DES, RSA等。
-
签名算法加密:也可以理解为单向哈希加密,比如MD5, SHA1等。加密算法固定,容 易被暴力破解。如果密码相同,得到的哈希值是一样的。
-
加盐哈希加密:加密时混入一段“随机”字符串(盐值)再进行哈希加密。即使 密码相同,如果盐值不同,那么哈希值也是不一样的。现在网站开发中主要是运 用这种加密方法
本篇文章主要介绍第四种 「加盐哈希加密」
werkzeug介绍
Werkzeug是一个WSGI工具包,他可以作为一个Web框架的底层库。但是 werkzeug 不是一个 web 服务器,也不是一个 web 框架,而是一个 工具 包,因为它封装好了很多 Web 框架的东西,例如 Request,Response 等等,大名鼎鼎的Flask就是基于werkzeug开发的。
安装 werkzeug
pip install Werkzeug
密码生成函数 generate_password_hash
>>> from werkzeug.security import generate_password_hash >>> generate_password_hash('123') 'pbkdf2:sha256:50000$fESwY4Cl$38fdf741069ef37c207211b9bee69514582dc366660563d75c00e7cbfd7cbd8a' >>> generate_password_hash('123') 'pbkdf2:sha256:50000$hUhR8Gr3$73d44814d5cd490c04e0559141fb327c31766a0314d82ee05e33c33e1559af78' >>> generate_password_hash('123') 'pbkdf2:sha256:50000$EDHR93sZ$0d72a4c15a1c07b03f4190c7ac30b48ae8b478a4977a0262fa16d38417450b21' >>> generate_password_hash('123') 'pbkdf2:sha256:50000$ntpFkKsc$bd062cd0b35c5b26c91242fc72eb0e889cf71b9dd4c1ae291587a7a3e84db293' >>> generate_password_hash('123') 'pbkdf2:sha256:50000$sVP5IXJG$b93a86f5343d2a243ec701bfdf0cff745a5b1532c66cb7f82fb7d252d3b5ffb0'
可以看到,每次计算出来的值都是不一样的, generate_password_hash
函数定义为
generate_password_hash(password, method='pbkdf2:sha256', salt_length=8)
password
为明文密码
method
哈希的方式,格式为 pbpdf2:<method>
主要有sha1,sha256,md5
salt_length
盐值的长度,默认为8
>>> generate_password_hash('123',method='pbkdf2:sha1',salt_length=10) 'pbkdf2:sha1:50000$4GUBRzzizn$45b0f6b84a4ca4352b45feea8283fc48186f9ee8' >>> generate_password_hash('123',method='pbkdf2:sha1',salt_length=8) 'pbkdf2:sha1:50000$4kHPpS9R$1f87c09c052342fd0d65b75aa70ababb1c17e7df' >>> generate_password_hash('123',method='pbkdf2:md5',salt_length=8) 'pbkdf2:md5:50000$zppMHqux$01acb41e0b2858bbc849abf77692a9c0' >>> generate_password_hash('123',method='pbkdf2:md5',salt_length=8) 'pbkdf2:md5:50000$rMaQutjR$1cc67c05e063cec0c8e5f8e048ddb5e1'
密码验证函数:check_password_hash
有生成函数就得有相应的解密函数, check_password_hash
的定义为
check_password_hash(pwhash, password)
pwhash
为密文
password
为明文
相同则返回 True
,不同返回 False
>>> check_password_hash('pbkdf2:sha256:50000$ntpFkKsc$bd062cd0b35c5b26c91242fc72eb0e889cf71b9dd4c1ae291587a7a3e84db293','123') True >>> check_password_hash('pbkdf2:sha256:50000$ntpFkKsc$bd062cd0b35c5b26c91242fc72eb0e889cf71b9dd4c1ae291587a7a3e84db293','1234') False
结语
这个加盐哈希加密以后的密文,放到另外一台服务器上也是可以校验通过的,如果做网站数据库迁移也不用重新生成数据,使用这套加密算法可以很大程度上规避暴力破解密码,还是那名老话,密码是123456的就算使用再牛逼的加密你依然是不安全的,另外撞库也是不可避免的,所以作为用户可以尝试不同的网站使用不同的密码来规避撞库问题。
参考文章
Flask加盐密码生成和验证函数以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 微软开源SEAL简单加密算法函数库
- golang crypt包的AES加密函数的使用
- 加密原理详解:对称式加密 VS 非对称式加密
- 编码、摘要和加密(三)——数据加密
- 聊聊对称加密与非对称加密
- 手机游戏加密之2d资源加密
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深入理解Android内核设计思想(第2版 套装上下册)
林学森 / 人民邮电出版社 / 2017-7-1 / 158
全书从操作系统的基础知识入手,全面剖析进程/线程、内存管理、Binder机制、GUI显示系统、多媒体管理、输入系统、虚拟机等核心技术在Android中的实现原理。书中讲述的知识点大部分来源于工程项目研发,因而具有较强的实用性,希望可以让读者“知其然,更知其所以然”。本书分为编译篇、系统原理篇、应用原理篇、系统工具篇,共4篇25章,基本涵盖了参与Android开发所需具备的知识,并通过大量图片与实例......一起来看看 《深入理解Android内核设计思想(第2版 套装上下册)》 这本书的介绍吧!