sha256加密_python中使用加盐哈希函数加密密码
开发网站离不开用户的注册与登录,今天来说说在网站开发的时候关于用户密码的保存方式,传统的方式有以下几种 - 明文存储:肉眼就可以识别,没有任何安全性。 谁用谁傻缺 - 加密存储:通过一定的变换形式,使得密码原文不易被识别。密码加密的几类方式:
- 明文转码加密: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加盐密码生成和验证函数
更多文章请点击查看我的个人博客
杨彦星 | 序语程言www.yangyanxing.com
也欢迎关注我的个人公众账号 序语程言
sha256加密_python中使用加盐哈希函数加密密码相关推荐
- 一个简单的方式搞定密码的加盐哈希与验证
过去一段时间来, 众多的网站遭遇用户密码数据库泄露事件.层出不穷的类似事件对用户会造成巨大的影响,因为人们往往习惯在不同网站使用相同的密码,一家 "暴库",全部遭殃. 单向加密 一 ...
- 浅谈MD5加密算法中的加盐值(SALT)
我们知道,如果直接对密码进行散列,那么***可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码. 加Salt可以一定程度上解决这一问题.所谓加Salt方法, ...
- 加盐哈希-Salted Password Hashing
(译文:http://blog.jobbole.com/61872/ (中文) 原文:https://crackstation.net/hashing-security.htm (英文) 个人推荐英文 ...
- 对于AES和RSA算法的结合使用以及MD5加盐注册登录时的密码加密
RSA和AES结合使用 接上篇的RSA和AES算法加密之后,AES对称算法对数据量大的加密比较快,而RSA公私钥加密的话会影响加密效率,但是AES的加密与解密的密钥是一致的,导致密钥不能外泄,密钥在网 ...
- java md5加盐与解密_md5加密,md5加盐加密和解密
packagecom.java.test;importjava.security.MessageDigest;importjava.security.SecureRandom;importjava.u ...
- MD5加密算法中的加盐值 ,和彩虹表攻击 防止彩虹表撞库
一.什么是彩虹表? 彩虹表(Rainbow Tables)就是一个庞大的.针对各种可能的字母组合预先计算好的哈希值的集合,不一定是针对MD5算法的,各种算法的都有,有了它可以快速的破解各类密码.越是复 ...
- python中setattr用法_python中hasattr()、getattr()、setattr()函数的使用
引言: 在阅读源码时,有很多简写的形式,其中一个比较常用的就是getattr()用来调用一个类中的变量或者方法,相关联的hasattr().getattr().setattr()函数的使用也一并学习了 ...
- python中all函数的用法_python中map、any、all函数用法分析
这篇文章主要介绍了 python 中 map . any . all 函数用法 , 实例分析了 map . any . all 函数 的相关使用技巧 , 具有一定参考借鉴价值 , 需要的朋友可以参考下 ...
- python中time库是什么意思_python中time库的time.time()函数的作用是什么
python中time库的time.time()函数的作用是什么? 作用:Python time time() 返回当前时间的时间戳(1970纪元后经过的浮点秒数). time()方法语法:time. ...
最新文章
- 数学分析高等代数考研试题荟萃[更新至2017年10月1日]
- 玩转iOS开发:《iOS设计模式 — 单例模式》
- 008_Spring Data JPA原生SQL
- Anordighos手绘休闲脚本字体
- 龙格库塔法matlab求解微分方程组,微分方程组的龙格库塔公式求解matlab版.pdf
- MapReduce关系代数运算
- MySQL子查询操作实例详解
- 戴尔win10插耳机还外放_通州附近戴尔笔记本电脑维修哪家强-北京信维佳业科技有限公司...
- FPGA设计的常用思想与技巧(转)
- 输入一个英文句子,翻转句子中单词的顺序 例如输入“I am a student.”,则输出“student. a am I”。
- Java RandomAccessFile getFilePointer()方法与示例
- android:ellipsize省略文字用法(转载)
- LeetCode 404 左叶子之和
- maven-聚合与继承
- NetMeeting的使用
- AB PLC仿真过程
- Cherry键盘外接Mac command按键失灵
- 【华为机试真题 Python实现】竖直四子棋
- Springboot 使用 sendgrid发送邮件
- 亚马逊英国站小风扇UKCA认证办理流程