你会用什么样的算法来为你的用户保存密码?如果你还在用明码的话,那么一旦你的网站被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加密相关jar包",它包含了用于Java环境的Bcrypt实现,以及相关的辅助库。 Bcrypt是由Niels Provos和David Mazières基于Blowfish加密算法设计的,它通过引入一个随机盐值,使得每次对相同的...
在Java环境中,可以使用`jBCrypt`库来实现BCrypt加密。例如,`jBCrypt-0.3`版本提供了`BCrypt.hashpw()`方法用于加密密码,以及`BCrypt.checkpw()`方法用于验证密码。这两个方法分别是: ```java import org....
Java 通过 BCrypt 加密过程详解 概述:在用户模块中,对于用户密码的保护,通常都会进行加密。我们通常对密码进行加密,然后存放在数据库中,在用户进行登录的时候,将其输入的密码进行加密然后与数据库中存放的...
Java写的BCrypt加密,很值得学习!看看就知道了
二十、商城 - 商家入驻审核-BCrypt 加密算法(8)6.youlexuan.zip
Java 常用的 4 种加密方式(MD5+Base64+SHA+BCrypt) Java 加密是指使用 Java 语言来实现数据加密、解密和数字签名等操作。数据加密是指将明文数据转换为难以理解的密文,以保护数据的机密性和完整性。Java 提供了...
MD5加密和Bcrypt加密-附件资源
loginTemplate MERN堆栈-使用Passport JS Local和Gmail策略以及Bcrypt加密/解密密码。
本篇文章将详细介绍iOS中常用的三种加密方法:AES(高级加密标准)、MD5(消息摘要算法5)以及Base64编码。 首先,AES是一种对称加密算法,全称为Advanced Encryption Standard,广泛应用于数据加密。它基于替换和...
内含有cast、blowfish、simple、des、cryptlib、rsa、mqueue、xtrcrypt、gf256、base32,base64、modexppc、network等一些的常见加密、解密算法
任何以.bfe结尾的文件都将被假定为使用bcrypt加密,并将尝试对其进行解密。 任何其他输入文件将被加密。 如果给出了多种类型的文件,则bcrypt将处理与给定的第一种文件类型相同的所有文件。 默认情况下,bcrypt将在...
加密 Elixir的Bcrypt密码哈希库。 Bcrypt是一种经过充分测试的基于密码的密钥派生功能,即使在计算能力提高的情况下,它也可以配置为保持缓慢并抵抗暴力攻击。与其他Bcrypt库的兼容性此版本基于Bcrypt的OpenBSD版本...
Mongoose插件使用bcrypt加密字段,并提供加密和验证的方法。 安装 $ npm install mongoose-bcrypt 默认用法 使用实例方法verifyPassword(password,callback)和verifyPasswordSync(password)以及静态方法...
在Spring Security中,提供了`BCryptPasswordEncoder`类,用于对用户密码进行BCrypt加密处理。在实际应用中,我们需要先引入Spring Boot的安全依赖,然后创建一个`BCryptPasswordEncoder`的Bean。在管理员密码管理...
$bcrypt$v=<version>r=$$ 在哪里: 场地 类型 描述 number 使用的bcrypt算法的版本。 number 处理编码为log2(迭代)的数据的成本。 string 一系列位,称为B64中编码的加密盐。 string 通过B64
# 基于Spring Boot和Vue的设备管理系统 ## 项目简介 本项目是一个基于Spring Boot和Vue框架的设备管理... Bcrypt加密: 保证密码安全性 权限体系: 基于用户角色授权体系,接口只需关心权限 数据初始化: DataCreator
jbcrypt.jar资源包,用于BCrypt加密。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
- 加密:BCrypt加密 ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、...
本文将深入探讨如何在Spring Boot项目中利用Spring Security进行权限控制,并结合BCrypt加密技术来增强用户密码的安全性,同时也会提及如何使用Thymeleaf模板引擎来呈现动态安全的界面。 首先,我们需要理解Spring ...