用户密码以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
用户密码以BCrypt加密的方式来防范被破解相关推荐
- C#对用户密码使用MD5加密与解密
C#中常涉及到对用户密码的加密于解密的算法,其中使用MD5加密是最常见的的实现方式.本文总结了通用的算法并结合了自己的一点小经验,分享给大家. 一.使用16位.32位.64位MD5方法对用户名加密 1 ...
- 对用户密码进行md5加密的代码实现
对密码进行md5加密,然后插入到数据库代码实现:
- mysql 用户密码md5_使用MD5编码实现数据库用户密码字段的加密
下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. 3 实例演练 3.1 测试环境 使用Scott/[email protected] --3 ...
- laravel5的Bcrypt加密方式对系统保存密码的小结
laravel5文档介绍 1 //对 A 密码使用Bcrypt 加密 2 $password = Hash::make('secret'); 3 4 //你也可直接使用 bcrypt 的 functi ...
- Discuz!6.1.0 用户密码如何加密的?
Discuz!6.1.0 用户密码是放在uc_members 表中的,cdb_members 表中的密码是随机放的,没有作用 用户的密码加密方式 $password 用户密码 $salt ...
- OAuth2客户端明文和用户密码为密文
一.问题描述: 使用Spring-security-0Auth2:2.5.1 版本,进行用户认证时,一直出现问题: {"error": "invalid_client&q ...
- 安全修改postgresql用户密码
作者:瀚高PG实验室 (Highgo PG Lab)-狮子歌歌 如果客户端认证方式为密码验证,那么必然会涉及到修改密码 如何安全地修改密码: 方式1 使用psql,连接到Postgres Server ...
- hmailserver mysql密码_hmailserver用户密码的加密算法
hmailserver是一个开源免费的邮件服务软件,在安装时自带有数据库,不过为了方便管理和扩展,还支持:mssql, mysql, PostgreSQL 外部数据库:用户的密码是以加密的方式放在数据 ...
- python如何制作登录密码_python实战系列之模拟用户密码登陆系统(一)
1. 前言 最近一直在研究学习python,基于python写一个模拟用户登陆验证的程序,大牛勿喷,欢迎各位同仁指导,学习!该程序使用函数式编程方式,将各个功能模块用函数实现,具体函数说明如下:get ...
最新文章
- linux ubuntu安装 mono,在Ubuntu 18.04系统中安装Mono及基本使用Mono的方法
- Windows Update Error: 80244019
- Dockerfile和Dockerfile-dev
- 数据库连接池和connection的理解
- Windows平台下GO语言编译器(GO-windows)
- 插入排序 - python实现
- 用Kubernetes搭建便携式开发环境之MongoDB
- C#实现捕获当前屏幕截图(转)
- java 编辑pdf表格_Java 生成pdf表格文档
- 我的世界java版如何装mod_《我的世界》怎么装mod 安装方法教程
- OpenGauss/MogDB调用C FUNCTION 范例
- 内容过于真实,可能会引起不适-----程序员去面试的梗!面试官:“哦了,明天来上班吧”
- 苹果4s手机装 java微信_苹果4s版本过低不能下载微信怎么安装旧版本的
- Photoshop(CC2020)未完
- 腾讯云 直播 OBS 在线推流
- php添加背景图及设置格式,PHP添加PNG图片背景透明水印操作类定义与用法示例
- 前端必看的 HTML + CSS技巧
- 【数论】君と彼女の恋
- 多序列比对要多久时间_Muscle进行多序列比对
- 老年机按键串号_老人机怎么打字母