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

你会用什么样的算法来为你的用户保存密码?如果你还在用明码的话,那么一旦你的网站被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

时间: 2024-08-02 14:58:28

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

系统设置用户密码的功能大全

在使用电脑的时候我们经常遇到各种各样的用户问题,如怎么设置用户密码的有效期,密码到期前提示用户更改密码?如怎么设置用户密码的复杂性,这样可以设置更难破解的密码等问题. 1 点击开始 - 运行 - 输入"gpedit.msc",点击确定即打开组策略.依次展开"计算机配置 - windows 设置 - 安全设置 - 账号策略 - 密码策略",如图: 2 如果你想要了解该功能只要双击该功能,然后点击解释此配置.以下是我的一些建议. 密码最长存留期,不应该设置太长,这样可以

忘记oracle的sys用户密码怎么修改

一.忘记除SYS.SYSTEM用户之外的用户的登录密码.  用SYS (或SYSTEM)用户登录: CONN SYS/PASS_WORD AS SYSDBA;  使用如下语句修改用户的密码: ALTER USER user_name IDENTIFIED BY "newpass";  注意:密码不能全是数字.并且不能是数字开头.否则会出现:ORA-00988: 口令缺失或无效 二.忘记SYS用户,或者是SYSTEM用户的密码.  如果是忘记SYSTEM用户的密码,可以用SYS用户登录.

php用户密码加密算法分析【Discuz加密算法】_php技巧

本文实例讲述了php用户密码加密算法.分享给大家供大家参考,具体如下: 今天在拿Discuz进行二次开发时需要在代码里验证Discuz的用户名密码,结果不小心掉进了坑里,因为Discuz的论坛有两张表来存储用户数据,一张在Discuz的数据库ultrax里面的pre_common_member里面,另一个是存储在了UCenter的数据库ucenter的uc_members表里.花了很大功夫在研究ultrax库里那张pre_common_member的数据,研究它的密码是如何生成的,结果搜了一下发

openfire4.0.1用户密码加密规则

问题描述 openfire4.0.1用户密码加密规则 请问openfire4.0.1用户密码加密规则是什么?之前版本的是通过passwordKey来加密的, 最新版本的好像不是 解决方案 http://blog.csdn.net/id19870510/article/details/8226315

找回MD5加密的密码及MD5加密数据库中数据

有时,在开发过程中,如果不小心更改掉了项目管理员帐号的密码而又忘了,存在数据库里的密码又是MD5加密后的,这时候怎么办?最为菜鸟的我,刚开始也很迷茫,不过向前辈们请教了请教,自己也查了查资料,特意整理记录一下,并分享给大家. 前提是你知道这个密码存在在哪个表的哪个字段,只不过是加密了,如果是oracle数据库的话,可以用DBMS_OBFUSCATION_TOOLKIT.MD5 ( input => utl_raw.cast_to_raw('预置密码'))来得到一个MD5加密后的密码, 所以我们可

MySQL 修改用户密码及重置root密码

    为数据库用户修改密码是DBA比较常见的工作之一.对于MySQL用户账户的密码修改,有几种不同的方式,推荐的方式使用加密函数来修改密码.本文主要描述了通过几种不同的方式来修改用户密码以及mysql root账户密码丢失(重置root密码)的处理方法.   1.密码修改的几种方法 a.可以在创建用户的时候指定密码,以及直接使用grant创建用户的时候指定密码. 对于已经存在的用户直接使用grant方式也可以修改密码 如下: --演示版本 root@localhost[(none)]> sho

当谁都能下载到几个最受欢迎网站的用户密码库

当谁都能下载到几个最受欢迎网站的用户密码库时,中国互联网--这个看起来人们曾经可以说悄悄话.购物.存储照片.私人信件的虚拟世界正在揭开最后一层危险的面纱. 近半个月以来,CSDN.天涯等网站的用户密码库陆续被爆出被破解并在网上流传.一场公民个人信息的安全危机爆发. 这看上去只是一个偶然事件,但安全圈内人士判断,CSDN网站几年前就已被攻破,只是这种在"地下"流通的东西,现在普通的人就能够拿到而已.这可能拉出来一个更加复杂的链条.本报接触的国内安全圈的人士称,这两年许多人私下都在交换.共

sql2000对现有的数据库密码进行MD5加密

问题描述 在sql server中对现有数据密码进行md5加密 用户数据库中密码是明码,现在想改用MD5加密方式,目前有很多数据库,而且数据库中的密码都在3000条以上,pwd字段都是nvarchar类型的. 请问:SQL SERVER2000中如何实现这样的功能? 问题补充:enet_java 写道 解决方案 引用enet_java 写道java的demo !!太不幸了,我现在也没有呢. 你觉得难点在什么地方呀?MD5加密的算法,我可以PM给你一个. 那谢谢了,我自己写asp吧解决方案二:ja

Discuz 用户密码加密算法

心想这随机生成的salt如何在登录时进行验证呢?然后网上说其实Discuz压根就没用那个密码,自己试验了一下,果真如此,即使把pre_common_member里面的用户密码改掉,照样能够正常登录,看来这个密码压根就没用,害我绕了一个大圈子. 好了,进入正题,Discuz的密码加密算法其实就是两次MD5加密,首先用明文进行一次加密,之后随机生成一个salt,再把第一次的密文后面添加salt作为明文再进行一次MD5加密.salt保存在uc_members表里,可以通过用户名进行获取. 像这样: M