Bcrypt 加密算法研究与对比

Bcrypt 加密算法研究与对比

  • 一、什么是Bcrypt
  • 二、Bcrypt如何加密与验证?
    • (一)encode方法加密:
    • (二)matches方法验证:
  • 三、如果使用彩虹表进行hash碰撞攻击会如何?
  • 四、比较
      • MD5加密算法的缺陷:
      • 相对于MD5,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是种慢哈希算法,执行时间较长。同时随机盐可以有效抵御彩虹表,使用这该种算法时也需要指定相应的参数,使破解难度增加。

四、比较

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

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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部