[翻译]Python开发中的密码散列(Hashing)

杀戮 (乌云安全实验室的杂役) | 2015-01-04 23:17

去年7月的一篇小文,看着还不错,就翻译了,当然还是我自己的语气,对于文中的一些概念加了点注释。

话说当年linkedin 和 adobe被人爆了菊,而且他们不恰当的密码储存方式导致黑客能够破解密码并且去干一些很坏很坏的事情。

关于这个一个很重要的概念是 hashing 和 加密的区别,加密是可逆的,hashing不是。第二个很重要的概念是,MD5和SHA 在密码Hashing上都不合适,有两个原因。

1. 没有salts

没有Salts导致当年linkedin被打成了翔。

注释: 并不是很新的技术,Salts 是个”佐料”,貌似这个翻译恰当一些,融入Salts 的加密过程可以用于抵抗彩虹表这种残暴的凌辱。技术细节相当于 用户输入密码 12345,系统会生成一个随机的字符串xxxxxx 和密码连接,放入hash函数进行散列,最后系统储存salts值和hash值用于用户每次登陆进行比较。

Python代码:import hashlib

import os

password = "password"

salt = os.urandom(16)

m = hashlib.md5()

m.update(salt + password)

m.hexdigest()

不过,这还是不够啊不够。

2. 速度快

(第一眼我也郁闷了,不过不要在意细节,请继续)

正常的密码散列比如MD5,不适合用在密码散列的第二个原因在于速度很快,对于大部分的算法,速度快是重点,当对于密码散列来说不是,当小白们的小电脑跑着普通的CPU的时候,不少黑客都开着GPU了,他们能够很快的进行密码破解,现代GPU能够在一秒之内进行千亿次MD5或者SHA运算。

特殊的密码散列一般在于解决这两个方面的原因。

3. 主流的密码Hashing

目前主流的观点是使用三种不同的hash函数用于密码hash , PBKDF2, Bcrypt and Scrypt。

当然老外也举办了一个 密码hashing的竞赛,貌似是比谁设计的hash函数更坑黑客。

https://password-hashing.net/

我们来看看 PBKDF2 的代码实现,Bcrypt 和 Scrypt 虽然普遍认为比较吊,不过PBKDF2被用的更多,其概念无语言限制,安装下。pip install passlib

接着from passlib.hash import pbkdf2_sha256

hash = pbkdf2_sha256.encrypt("password", rounds=200000, salt_size=16)

偶们可以看到函数有三个参数,第一个 就是需要散列的字符串,第二个是密码的迭代次数,(难道说内部实现是 md5(md5(md5(password))),好吧这是我吐槽),通过设置第一个长度可以增加计算需要的时间,具体实际部署可以自行设定,越长越好,第三个是salt的大小。

核对时很简单,passlib有个函数用于验证是否正确from passlib.hash import pbkdf2_sha256

pbkdf2_sha256.verify("password", hash)

Python库passlib: https://pythonhosted.org/passlib/

python黑客代码_[翻译]Python开发中的密码散列(Hashing)相关推荐

  1. python编写代码_用 Python 编写干净、可测试、高质量的代码

    用 Python 编写干净.可测试.高质量的代码 Noah Gift 2010 年 12 月 20 日发布 简介 编写软件是人所承担的最复杂的任务之一.AWK 编程语言和 "K and R ...

  2. python作品代码_学习python的一些心得体会

    初识python 专升本来到桂林电子科技大学的时候,谈及这个学校也许他是全国四所叫电子科技大学的学校,而我很幸运的从这个学校里毕业了,那个时候选修一门课程就是python的选修课,从此跟python结 ...

  3. python房子代码_用python爬取租房网站信息的代码

    自己在刚学习python时写的,中途遇到很多问题,查了很多资料,下面就是我爬取租房信息的代码: 链家的房租网站 两个导入的包 1.requests 用来过去网页内容 2.BeautifulSoup i ...

  4. python三维重建代码_基于Python的三维重建开源代码

    [实例简介] 基于Python的三维重建开源代码,包括特征提取,SFM,PMVS以及CMVS等相关功能! [实例截图] [核心代码] sfm-bundler(python) └── sfm-bundl ...

  5. python棒棒糖代码_(python matplotlib)如何更改棒棒糖图中每个棒棒糖的颜色(斧杆)...

    我使用ax.stem在python中绘制棒棒糖图.然而,我发现很难给每个棒棒糖指定不同的颜色 as shown here 如您所见,我有两个类别"GWP"和"FDP&qu ...

  6. python新书 代码_黄哥Python,2018年Python新书推荐

    1.对待学习Python的态度问题. 如果你想在大城市(一线城市就业),通过学习python 学会编程,是比较好的选择之一.当然可以选择Java.PHP等编程语言.如果在三线,四线城市等城市工作,建议 ...

  7. python美观代码_为何 Python 代码要写得美观而明确

    欢迎阅读"Python 光明节(Pythonukkah)"系列文章,这个系列文章将会讨论<Python 之禅>.咱们首先来看<Python 之禅>里的前两个 ...

  8. python美观代码_为什么Python 代码要写得美观而明确

    早在 1999 年,Python 的贡献者之一,Tim Peters 就提出了<Python 之禅>,直到二十年后的今天,<Python 之禅>中的 19 条原则 仍然对整个社 ...

  9. python全球购代码_理解python的unicode字符串

    基于python2.7中的字符串: unicode-->编码encode('utf-8')-->写入文件 读出文件-->解码decode('utf-8')-->unicode ...

最新文章

  1. 阿里云云盾-风险识别-增强版模式发布
  2. C/Cpp / 类的前向声明、不完全类型和完全类型
  3. 6-7 求链表的倒数第m个元素 (25 分)
  4. 将一个BYTE数组转换成16进制字符串和10进制字符串格式
  5. @cacheable 设置过期时间_缓存面试三连击——聊聊Redis过期策略?内存淘汰机制?再手写一个LRU 吧!...
  6. (vue基础试炼_08)Vue模板语法
  7. [No000048]程序员的成长过程中,有哪些阶段?
  8. atlas 力矩计算_Atlas 2.1.0 实践(2)—— 安装Atlas
  9. 通达OA - 数据备份与恢复指南
  10. 让FireFox火狐支持迅雷精简版
  11. Win11想运行老游戏怎么设置
  12. 计算机网络和智能家居,智能家居与传统智能家居到底有什么区别
  13. 个人开发作品分享:iTab新标签页
  14. Altium Designer 入门及环境配置
  15. c语言中void f1(),c语言常见笔试题f1ryiedy.doc
  16. 单位换算android,Android单位换算
  17. 害虫防治技术有哪些?
  18. 幂级数和函数经典例题_逐项求导的坑,祸害不浅
  19. 【NEST】脉冲神经网络仿真平台入门手册整理翻译记录
  20. 什么情况下要做固定资产减值准备

热门文章

  1. 安卓手机测评_安卓手机8G运存,比不上iPhone 2G?终于知道原因了!
  2. linux怎么测试磁盘读写,怎样测试Linux磁盘的读写速率
  3. TextBoxSuggest,输入框提示工具,输入建议,输入匹配,辅助输入,输入即时提示,文本编辑器,Visual Studio效果,高速查询引擎,哈希树,模糊匹配,百万条零毫秒
  4. -heap 查看当前jvm堆栈信息_必知必会的JVM工具系列二,读懂会用jhat,jstack,jstatd,JConsole...
  5. plus 什么是mybais_MyBatis和MyBatisPlus的区别是什么?
  6. linux开发 stc_Linux下构建stc51单片机开发环境
  7. java400状态,java – HttpURLConnection:如何读取400响应的有效负载
  8. android垂直公告,【Android之垂直翻页公告】
  9. php项目架构图,项目架构 · Lanson技术文档 · 看云
  10. 华为stfal00是什么手机_opporeno5pro和华为p40pro有什么区别 哪款手机更好