Bcrypt 加密算法研究与对比

一、什么是Bcrypt

1、bcrypt,是一个跨平台的文件加密工具。由它加密的文件可在所有支持的操作系统和处理器上进行转移。它的口令必须是8至56个字符,并将在内部被转化为448位的密钥。

2、Bcrypt是单向hash算法, 不可逆向解密,生成的密文是60位的。

二、Bcrypt如何加密与验证?

以SpringSecurity为例:BCryptPasswordEncoder类中有两个方法:encodematches。前者用于加密,后者用于验证。
源码解析参考地址:https://www.cnblogs.com/chengxuxiaoyuan/p/11939084.html

(一)encode方法加密:

  • 大致方法调用流程:
    => encode() 传入明文,准备加密
    => BCrypt.gensalt() 获取生成随机盐值salt
    => hashpw() 通过传入的salt生成real_salt。将real_salt和传入的明文,通过规则策略生成最终密文。

  • 加密后的最终密文示例:(图片来源网上)
    转载自网上

    1、Bcrypt: 2a代表Bcrypt加密版本号。
    2、Rouds: 迭代次方数,10是默认值。可以设置范围为4-31。最终迭代次数为2的Rouds次方。
    3、Salt: 22位的盐值(即上述的real_salt)。
    4、Hash:明文password和Salt一起hash加密后生成的密文,长度31位。

(二)matches方法验证:

  • 大致方法调用流程:
    => matches() 传入明文与数据库密文准备进行验证。
    => BCRYPT_PATTERN.matcher() 校验数据库密文是否符合规范。
    => BCrypt.checkpw() 进入匹配明文与数据库密文。
    => hashpw() 传入明文与数据库密文。提取数据库密文中的指定位置的22位长度的盐值real_salt,将其与明文通过相同加密策略生成新密文。
    => equalsNoEarlyReturn() 新密文与数据库密文逐个字节比较,完全相同则说明验证成功。

三、如果使用彩虹表进行hash碰撞攻击会如何?

Bcrypt是种慢哈希算法,执行时间较长。同时随机盐可以有效抵御彩虹表,使用这该种算法时也需要指定相应的参数,使破解难度增加。

四、比较

  • MD5加密算法的缺陷:

    1、常规MD5加密,可使用彩虹表碰撞来进行攻击,可以匹配出原密码或者能得到相同密文的明文。
    2、加盐使攻击者无法采用特定的查询表或彩虹表快速破解大量哈希值,但不能阻止字典攻击或暴力攻击。这里假设攻击者已经获取到用户数据库,意味着攻击者知道每个用户的盐值,根据Kerckhoffs’s principle,应该假设攻击者知道用户系统使用密码加密算法,如果攻击者使用高端GPU或定制的ASIC,每秒可以进行数十亿次哈希计算,针对每个用户进行字典查询的效率依旧很高效。

  • 相对于MD5,Bcrypt加密算法的特点:

    1、相同明文通过Bcrypt生成的密文每次都是不一样的,MD5则相同。这样就无法通过直接比对密文来反推明文。
    2、Bcrypt是种慢哈希算法,执行时间较长。有文章指出,针对某一字符串,Bcrypt执行一次加密约0.3秒,MD5加密约1微秒(百万分之一秒)。使得暴力破解Bcrypt的时间成本很高。https://www.jianshu.com/p/2b131bfc2f10
    3、Bcrypt加密长度60位,MD5是32位,提高穷举难度。

  • 各种加密算法的比较参考:

    https://www.cnblogs.com/tqlin/p/11320970.html

五、数据库迁移是否有问题?

Bcrypt算法是跨平台的加密算法,数据库迁移后,不会影响原数据的验证。


本文内容部分来自其他网站,如有侵权,请私信作者。
参考地址:
1、https://www.jianshu.com/p/2b131bfc2f10
2、https://www.cnblogs.com/chengxuxiaoyuan/p/11939084.html
3、https://www.cnblogs.com/qianjinyan/p/10636404.html
4、https://www.cnblogs.com/tqlin/p/11320970.html

Bcrypt加密算法是一种慢哈希算法,相同明文通过Bcrypt生成的密文每次都是不一样的,这样就无法通过直接比对密文来反推明文。与MD5相比,Bcrypt加密算法的执行时间较长,约为0.3秒,而MD5加密约为1微秒。这使得暴力破解Bcrypt的时间成本很高。此外,Bcrypt加密长度为60位,而MD5只有32位,这也提高了穷举破解的难度。因此,Bcrypt加密算法相对于MD5具有更高的安全性和抗攻击性。\[1\] 引用\[1\]:相同明文通过Bcrypt生成的密文每次都是不一样的,MD5则相同。这样就无法通过直接比对密文来反推明文。 2、Bcrypt是种慢哈希算法,执行时间较长。有文章指出,针对某一字符串,Bcrypt执行一次加密约0.3秒,MD5加密约1微秒(百万分之一秒)。使得暴力破解Bcrypt的时间成本很高。Bcrypt加密长度60位,MD5是32位,提高穷举难度。\[1\] #### 引用[.reference_title] - *1* *2* [Bcrypt 加密算法研究与对比](https://blog.csdn.net/x2hg123/article/details/107961008)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [spring security (BCryptPasswordEncoder)加密及判断密码是否相同](https://blog.csdn.net/hcrw01/article/details/107745555)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值