添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

你会用什么样的算法来为你的用户保存密码?如果你还在用明码的话,那么一旦你的网站被hack了,那么你所有的用户口令都会被泄露了,这意味着,你的系统或是网站就此完蛋了。所以,我们需要通过一些不可逆的算法来保存用户的密码。比如:MD5, SHA1, SHA256, SHA512, SHA-3,等Hash算法。这些算法都是不可逆的。系统在验证用户的口令时,需要把Hash加密过后的口令与后面存放口令的数据库中的口令做比较,如果一致才算验证通过。

但你觉得这些算法好吗?我说的是:MD5, SHA1, SHA256, SHA512, SHA-3。如果你使用的是MD5算法来加密你的口令,如果你的口令长度只有小写字母再加上数字,假设口令的长度是6位,那么在目前一台比较新一点的PC机上,穷举所有的口令只需要40秒钟。而据我们了解,几乎有90%以上的用户只用小写字母和数字来组织其口令。对于6位长度的密码只需要最多40秒就可以破解了,这可能会吓到你。

如果你愿意花2000美金和一周的时间来构建一个 CUDA ,那么,你可以在你组建的这个集群中使用进行密码穷举运算,其速度是, 1秒钟可以计算7亿个口令 。对于目前实际当中使用的比较复杂的口令,其破解率也可以高达每秒一个。当然,这里说的算法是MD5,SHA之类的算法。

那么,对于这样的一种情况来说,我们怎么办?我们还是有办法的。

我们知道MD5,SHA的算法速度太快了。所以,我们需要一个“慢一点”的加密算法。呵呵。bcrypt是这样的一个算法,因为它很慢,对于计算机来说,其慢得有点BT了,但却慢得刚刚好!对于验证用户口令来说是不慢的,对于穷举用户口令来说,其会让那些计算机变得如同蜗牛一样。

因为bcrypt采用了一系列各种不同的Blowfish加密算法,并引入了一个work factor,这个工作因子可以让你决定这个算法的代价有多大。因为这些,这个算法不会因为计算机CPU处理速度变快了,而导致算法的时间会缩短了。因为,你可以增加work factor来把其性能降下来。呵呵。

那么,bcrypt到底有多慢?如果和MD5一起来比较的话,如果使用值为12的work factor的话,如果加密“cool”的话,bcrypt需要0.3秒,而MD5只需要一微秒(百万分之一秒)。也就是说,前面我们说的那个只需要40秒就可以穷举完所有的可能的MD5编码的口令的算法,在使用bcrypt下,需要12年。

这就是bcrypt给你带来的选择, 你可以一个安全的口令和一个快速的加密算法,或是一个不怎么安全的口令和一个性能不好的加密算法

(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)

好烂啊 有点差 凑合看看 还不错 很精彩 ( 24 人打了分,平均分: 3.67 )
Loading...
编程工具 , 网络安全

@supersonic
yes, 需要一个 secrit 字段来共同进行 md5 加密就OK了, 如果secrit 字段足够长,并且足够复杂,而且对同一个用户有访问次数限制的话,理论上来说是不能被破解的

Pingback: 新溪转发博客 » 你会做Web上的用户登录功能吗? Pingback: Web开发中需要了解的东西 | 布莱特的世界 Pingback: Web开发中需要了解的东西 | 桌上两本书 Pingback: Web开发中需要了解的东西 | multiprocess Pingback: 你会做Web上的用户登录功能吗? | multiprocess Pingback: Web开发中需要了解的东西 | Hiko Pingback: Web开发中需要了解的东西(转) | 助手之园 Pingback: blog reading@2014 Pingback: 湘爱琴| Web开发中需要特别注意的地方 Pingback: Web开发中需要了解的东西 | 木木老蔫 Pingback: 针对密码泄漏事件,都有哪些相对安全的密码加密规则? | segment-解决方案
  • 程序员技术练级攻略
  • “火柴棍式”程序员面试题
  • 简明 Vim 练级攻略
  • “作环保的程序员,从不用百度开始”
  • TCP 的那些事儿(上)
  • 做个环保主义的程序员
  • AWK 简明教程
  • 编程能力与编程年龄
  • 二维码的生成细节和原理
  • sed 简明教程
  • 如何学好C语言
  • 如何超过大多数人
  • 技术人员的发展之路
  • 疫苗:Java HashMap的死循环
  • 由12306.cn谈谈网站性能技术
  • 缓存更新的套路
  • 别让自己“墙”了自己
  • 应该知道的Linux技巧
  • TCP 的那些事儿(下)
  • 分布式系统的事务处理
  • 无锁队列的实现
  • “21天教你学会C++”
  • Lua简明教程
  • 如何写出无法维护的代码
  • 性能调优攻略
  • MySQL性能优化的最佳20+条经验
  • 6个变态的C语言Hello World程序
  • Docker基础技术:Linux Namespace(上)
  • 28个Unix/Linux的命令行神器
  • 我做系统架构的一些原则
  • 业界新闻 (33)
  • 企业应用 (2)
  • 技术新闻 (38)
  • 技术管理 (19)
  • 技术读物 (125)
  • 操作系统 (97)
  • Unix/Linux (81)
  • Windows (12)
  • 数据库 (11)
  • 杂项资源 (295)
  • 流程方法 (48)
  • 程序设计 (110)
  • 系统架构 (15)
  • 编程工具 (67)
  • 编程语言 (326)
  • .NET编程 (3)
  • Ajax开发 (9)
  • C/C++语言 (74)
  • Erlang (1)
  • Go 语言 (15)
  • Java语言 (32)
  • PHP脚本 (11)
  • Python (23)
  • Ruby (5)
  • Rust 语言 (1)
  • Web开发 (106)
  • 网络安全 (36)
  • 职场生涯 (40)
  • 趣味问题 (19)
  • 轶事趣闻 (147)
  •