Bcrypt 加密算法研究与对比

2023-11-12

一、什么是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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bcrypt 加密算法研究与对比 的相关文章

随机推荐

  • 保持健康体态

    少吃多动 我们日常生活中经常可以吃到的米面谷物 蛋糕甜点等都属于富含 碳水化合物 的食物 其中 像蛋糕 甜点 面条这种经过精细加工的食物 就可以被理解为 精制碳水化合物 而奶茶 饮料里边的糖更是精加工碳水 平时吃的精白米面 都属于是精加工碳
  • Linux文件误删除恢复操作

    本文参考http write blog csdn net postedit ticket ST 491405 OGjDDusZeyMgVQ7bHW7f passport csdn net 前言 作为一个多用户 多任务的操作系统 Linux下
  • Linux统计物理cpu、逻辑cpu

    物理cpu个数 grep physical id proc cpuinfo sort uniq wc l 每个物理cpu的核心个数 grep cpu cores proc cpuinfo uniq awk F print 2 每个物理cpu
  • 值传递与引用传递的区别

    一 值传递 是指在调用函数时将实际参数复制一份传递到函数中 这样在函数中如果对参数进行修改 将不会影响到实际参数 代码在内存中的执行流程 1 首先加载main方法 2 接下来int number 100 3 输出调用前的number 结果为
  • C# 参考 : sealed 密封类

    C 语言参考 sealed C 参考 当对一个类应用 sealed 修饰符时 此修饰符会阻止其他类从该类继承 在下面的示例中 类 B 从类 A 继承 但是任何类都不能从类 B 继承 1 class A 2 sealed class B A
  • mysql提高数据插入效率

    1 同时插入多行记录时 宜采用一条Insert语句 2 批量插入记录时 建立采用Load Date Infile语句 3 插入延迟 提高插入操作对系统的不利影响 4 在插入大量数据之前 可以先将表锁定 5 插入数据之前先对数据进行排序
  • Java BufferedImage设置透明背景

    方式一 从网上搜索出来的方案 BufferedImage bufferedImage new BufferedImage width height BufferedImage TYPE INT RGB Graphics2D graphics
  • 《c/c++ 获取时间戳》——精确到毫秒

    timeb h和time h 这两个是C 的标准头文件 在Microsoft Visual Studio VC98 Include中 表示了C 对时间的支持能力 time h中申明了tm结构体 来对时间年月日 时分秒的支持 值得注意的是 它
  • 小程序运营成功的秘诀

    随着移动互联网的快速发展 小程序已经成为许多企业提升用户体验 增强市场竞争力的重要工具 然而 在竞争激烈的市场环境下 要想让小程序真正成功 吸引用户并保持用户的活跃度 需要一系列有效的运营策略 本文将深入探讨小程序运营成功的关键要素 帮助企
  • [Oracle]解决dbms_output.put_line输出长度限制

    解决dbms output put line输出长度限制 设置dbms output enable n n为一个比较大的数值 即长度大于即将输出的内容 如下函数是将输出的长段内容逐行输出的存储过程 可替代dbms output put li
  • WSL2实现桥接网卡(简单版)局域网内互ping不成问题~

    Windows操作 同时选中wsl网卡与以太网网卡 然后选择桥接 就会出现桥接网卡 设置网桥的静态ip和dns WSL2操作 执行以下脚本 实际IP地址 网关啥的根据实际情况设置 bin bash new ip 168 168 4 169
  • VGGNet实现CIFAR-100图像识别-2(图像增强/ImageDataGenerator)

    图像增强 ImageDataGenerator 官方文档直达 代码 注意 使用图像增强的原因 测试ImageDataGenerator对象的flow方法中batch size参数 具体分析ImageDataGenerator对象的flow方
  • Android博客周刊专题之#插件化开发#

    转自 http www androidblog cn index php Index detail id 16 本期专栏目讨论插件化开发 插件化涉及的东西很多 所以我们需要多个维度去学习 大概分为5个部分 预备知识 入门 进阶 系列 类库
  • 【H.264/AVC视频编解码技术详解】十九、熵编码(5):CABAC语法元素的二值化

    H 264 AVC视频编解码技术详解 视频教程已经在 CSDN学院 上线 视频中详述了H 264的背景 标准协议和实现 并通过一个实战工程的形式对H 264的标准进行解析和实现 欢迎观看 纸上得来终觉浅 绝知此事要躬行 只有自己按照标准文档
  • 更改bat文件图标_如何优雅地设置文件夹图标?收下我的小工具吧

    作者 富妈 在 Windows 系统 可以通过修改图标使文件夹更容易区分 可是如果需要美化的文件夹太多 一个个设置就显得很费力 而且移动文件夹或者重装系统后 图标也容易失效 这是一个很常见的问题 但网上相关的资料却比较少 很多小伙伴可能在搜
  • 关于电脑D盘(C盘等)出现管理员权限(影响删除,重命名),需要解除具体操作。

    管理员权限 影响新建文件 修改文件类型 内容 当安装软件时也带来诸多不便 对于某些语言输入器 编译器更是不友好 因为我们需要经常新建文件 修改文件 我就是在用VScode时发现的 D盘文件全都开启了管理员权限 研究一上午找到两种解决方案 第
  • Unity Camera 的跟踪,转动,缩放,代码教程 适合做角色的第一,第三人称视角

    Unity Camera 的跟踪 转动 缩放 代码教程 适合做角色的第一 第三人称视角 1 代码挂载到摄像机 camera上 Player是你要跟踪物体的位置 把你要跟踪的物体放上就行 2 源代码 using UnityEngine usi
  • python 3.6安装cPickle

    1 在python2 X中 需要安装cPickle 2 在python3 X中 这个包已被别的包替换 使用以下语句即可 import pickle as cPickle
  • string.IsNullOrEmpty()

    string IsNullOrEmpty 是一个判断字符串是否为空引用或者值为空的方法 string IsNullOrEmpty 返回值是boolen型 也就是true或者false
  • Bcrypt 加密算法研究与对比

    Bcrypt 加密算法研究与对比 一 什么是Bcrypt 二 Bcrypt如何加密与验证 一 encode方法加密 二 matches方法验证 三 如果使用彩虹表进行hash碰撞攻击会如何 四 比较 MD5加密算法的缺陷 相对于MD5 Bc