关于maven项目中使用BCrypt加密方式

 更新时间:2024年10月24日 11:39:36   作者:涤生272  
BCrypt是一种基于Blowfish加密算法的密码散列函数,用于安全存储和验证用户密码,它通过引入盐和工作因子增加计算复杂度,有效防止彩虹表攻击和破解,BCrypt具备适应性工作因子、成本参数调整、迭代哈希和密钥扩展等特点,被广泛应用于Web应用程序的安全性设计中

maven项目中使用BCrypt加密

BCrypt是一种密码散列函数,主要用于安全地存储和验证用户密码。

它是Blowfish加密算法的一种变体,由Niels Provos设计并在1999年发布。

BCrypt的设计目标是为了抵御彩虹表攻击和暴力/破解,它通过引入盐(salt)和工作因子(cost factor)来增加计算复杂度,从而使得密码哈希更加安全。

  • 1. Salt(盐):每个密码哈希都使用不同的随机盐值,这使得即使两个用户使用相同的密码,他们的哈希也会不同,增加了密码被破解的难度。
  • 2. Adaptive Work Factor(适应性工作因子):BCrypt允许设置一个工作因子,它决定了计算哈希所需的时间。较高的工作因子意味着更长的计算时间和更高的安全性,但同时也意味着更多的CPU资源消耗。
  • 3. Cost Parameter(成本参数):工作因子通常被称为“成本参数”,因为它反映了计算哈希的成本。随着硬件性能的提升,可以逐渐增加成本参数以保持哈希计算的难度,确保安全性不随时间降低。
  • 4. Iterative Hashing(迭代哈希):BCrypt使用迭代哈希过程,这意味着它会多次运行哈希算法,以增加破解难度。
  • 5. Key Stretching(密钥扩展):BCrypt的迭代过程也是一种密钥扩展技术,它增加了密码到密钥转换的时间,降低了暴力攻击的速度。

在实际应用中,BCrypt通常用于Web应用程序和其他需要安全存储用户密码的系统中。

许多现代框架和库,如Spring Security、Django、Ruby on Rails等,都内置了对BCrypt的支持。

第一步

maven的pom文件里引入依赖

  <!--BCrypt依赖-->
        <dependency>
            <groupId>org.mindrot</groupId>
            <artifactId>jbcrypt</artifactId>
            <version>0.4</version>
        </dependency>

第二步

service的实现类serviceImpl里引入(根据自己的需要更改代码)

user.setPassword(BCrypt.hashpw(reqVo.getPassword(),BCrypt.gensalt()));

第三步

测试

{
"username": "134", 
"account": "dkk", 
"password": "144", 
"address": "小王", 
"phone": "135555551" ,
"create_time":"2011"
}

效果如图

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring Security登录接口兼容JSON格式登录实现示例

    Spring Security登录接口兼容JSON格式登录实现示例

    前后端分离中,前端和后端的数据交互通常是JSON格式,本文主要介绍了Spring Security登录接口兼容JSON格式登录实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • SpringBoot注解生效原理全解析

    SpringBoot注解生效原理全解析

    Spring Boot注解自动生效依赖于Spring容器和处理机制,通过扫描、解析配置类生成BeanDefinition,再由容器实例化,实现@Autowired等注解的自动注入与组件注册,本文给大家介绍SpringBoot注解生效原理分析,感兴趣的朋友一起看看吧
    2025-09-09
  • Java中使用正则表达式获取网页中所有图片的路径

    Java中使用正则表达式获取网页中所有图片的路径

    这篇文章主要介绍了Java中使用正则表达式获取网页中所有图片的路径,本文直接给出实例代码,需要的朋友可以参考下
    2015-06-06
  • SpringBoot中的异步执行方法详解

    SpringBoot中的异步执行方法详解

    这篇文章主要介绍了SpringBoot中的异步执行方法详解,ThreadpoolTaskExecutor不需要手动的创建当前线程池,但往往我们还是会手动指定,具体原因看源码就可以自有判断,需要的朋友可以参考下
    2023-10-10
  • 带你深入概括Java!六、方法和方法重载!(推荐)

    带你深入概括Java!六、方法和方法重载!(推荐)

    这篇文章主要介绍了Java方法和方法重载,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Java 数组迭代你会用吗

    Java 数组迭代你会用吗

    Java 数组是我们学习或工作中常用到的数据结构,我们会经常写数组迭代的代码,本文介绍三种数组迭代的方式,感兴趣的可以了解一下
    2021-09-09
  • idea中操作git shelve与git stash全过程

    idea中操作git shelve与git stash全过程

    文章介绍了两种代码暂存工具:gitshelve和gitstash,gitshelve提供了静默暂存功能,可以从shelf中取出暂存的代码并多次取出,不需要后可以删除shelf,gitstash则通过vcs菜单进行暂存和取出,方便在不同分支间切换时保留修改
    2025-11-11
  • 解决Mybatis中mapper的ID冲突问题

    解决Mybatis中mapper的ID冲突问题

    这篇文章主要介绍了解决Mybatis中mapper的ID冲突问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 2021年最新Redis面试题汇总(4)

    2021年最新Redis面试题汇总(4)

    在程序员面试过程中redis相关的知识是常被问到的话题。这篇文章主要介绍了几道Redis面试题,整理一下分享给大家,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Spring 事件驱动用法完整流程

    Spring 事件驱动用法完整流程

    文章总结了Spring事件驱动的完整流程,包括定义事件、发布事件、监听事件和线程池配置,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2026-02-02

最新评论