你会用什么样的算法来为你的用户保存密码?如果你还在用明码的话,那么一旦你的网站被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给你带来的选择,你可以一个安全的口令和一个快速的加密算法,或是一个不怎么安全的口令和一个性能不好的加密算法。

那么我们现在需要下载BCrypt的文件了,点击这里下载

代码中使用下面的代码来生成加密串以及比较密码:

1234
//passwd是原密码,hash为加密后生成的串String hash = BCrypt.hashpw(passwd, BCrypt.gensalt()); //比较密码和生成的密码串,相同返回trueBCrypt.checkpw(passwd, hash);

参考文章:http://coolshell.cn/articles/2078.html/comment-page-2#comments

用户密码以BCrypt加密的方式来防范被破解相关推荐

  1. C#对用户密码使用MD5加密与解密

    C#中常涉及到对用户密码的加密于解密的算法,其中使用MD5加密是最常见的的实现方式.本文总结了通用的算法并结合了自己的一点小经验,分享给大家. 一.使用16位.32位.64位MD5方法对用户名加密 1 ...

  2. 对用户密码进行md5加密的代码实现

    对密码进行md5加密,然后插入到数据库代码实现:

  3. mysql 用户密码md5_使用MD5编码实现数据库用户密码字段的加密

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. 3 实例演练 3.1 测试环境 使用Scott/[email protected] --3 ...

  4. laravel5的Bcrypt加密方式对系统保存密码的小结

    laravel5文档介绍 1 //对 A 密码使用Bcrypt 加密 2 $password = Hash::make('secret'); 3 4 //你也可直接使用 bcrypt 的 functi ...

  5. Discuz!6.1.0 用户密码如何加密的?

    Discuz!6.1.0 用户密码是放在uc_members 表中的,cdb_members 表中的密码是随机放的,没有作用 用户的密码加密方式 $password 用户密码 $salt        ...

  6. OAuth2客户端明文和用户密码为密文

    一.问题描述: 使用Spring-security-0Auth2:2.5.1 版本,进行用户认证时,一直出现问题: {"error": "invalid_client&q ...

  7. 安全修改postgresql用户密码

    作者:瀚高PG实验室 (Highgo PG Lab)-狮子歌歌 如果客户端认证方式为密码验证,那么必然会涉及到修改密码 如何安全地修改密码: 方式1 使用psql,连接到Postgres Server ...

  8. hmailserver mysql密码_hmailserver用户密码的加密算法

    hmailserver是一个开源免费的邮件服务软件,在安装时自带有数据库,不过为了方便管理和扩展,还支持:mssql, mysql, PostgreSQL 外部数据库:用户的密码是以加密的方式放在数据 ...

  9. python如何制作登录密码_python实战系列之模拟用户密码登陆系统(一)

    1. 前言 最近一直在研究学习python,基于python写一个模拟用户登陆验证的程序,大牛勿喷,欢迎各位同仁指导,学习!该程序使用函数式编程方式,将各个功能模块用函数实现,具体函数说明如下:get ...

最新文章

  1. linux ubuntu安装 mono,在Ubuntu 18.04系统中安装Mono及基本使用Mono的方法
  2. Windows Update Error: 80244019
  3. Dockerfile和Dockerfile-dev
  4. 数据库连接池和connection的理解
  5. Windows平台下GO语言编译器(GO-windows)
  6. 插入排序 - python实现
  7. 用Kubernetes搭建便携式开发环境之MongoDB
  8. C#实现捕获当前屏幕截图(转)
  9. java 编辑pdf表格_Java 生成pdf表格文档
  10. 我的世界java版如何装mod_《我的世界》怎么装mod 安装方法教程
  11. OpenGauss/MogDB调用C FUNCTION 范例
  12. 内容过于真实,可能会引起不适-----程序员去面试的梗!面试官:“哦了,明天来上班吧”
  13. 苹果4s手机装 java微信_苹果4s版本过低不能下载微信怎么安装旧版本的
  14. Photoshop(CC2020)未完
  15. 腾讯云 直播 OBS 在线推流
  16. php添加背景图及设置格式,PHP添加PNG图片背景透明水印操作类定义与用法示例
  17. 前端必看的 HTML + CSS技巧
  18. 【数论】君と彼女の恋
  19. 多序列比对要多久时间_Muscle进行多序列比对
  20. 老年机按键串号_老人机怎么打字母

热门文章

  1. 悄悄告诉你Java面试必备技能是什么?
  2. spring boot (二) web swagger2
  3. python中的itemgetter函数
  4. 处于风口浪尖的区块链和人工智能,联手在这些领域落地有声
  5. 设置Exchange 通讯组接收外部组织邮件
  6. java基础9(IO流)-File类
  7. 多线程 之 生产者与消费者
  8. java使用smartupload组件实现文件上传的方法
  9. 【后缀数组】bzoj2217 Secretary
  10. Java程序运行时间的计算