当前位置: 首页 > news >正文

SpringBoot+BCrypt算法加密

BCrypt是一种密码哈希函数,BCrypt算法使用“盐”来加密密码,这是一种随机生成的字符串,可以在密码加密过程中使用,以确保每次加密结果都不同。盐的使用增强了安全性,因为攻击者需要花费更多的时间来破解密码。

下图为使用BCrypt算法后的的密码结果值:

70b2c1ed8bbe45888cc23c1e2443bcfe.png

下面讲一下注册登陆场景中如何使用BCrypt算法的。

首先,确保项目中包含了Spring Security Crypto的依赖,可以在pom.xml文件中添加Spring Security的依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
</dependency>

Spring Security是一个广泛使用的身份验证和授权框架,而Spring Security Crypto是其中的一个模块,专门用于提供加密和安全相关的功能,提供对称加密(如AES和RSA)、密钥生成和密码编码等功能。这个模块作为核心模块的一部分,但不依赖于任何其他Spring Security或Spring代码。

在Spring Security Crypto中,你可以使用BCryptPasswordEncoder类来进行BCrypt加密、验密。

7c905016a2ee4f0380257d4a0c8938e9.png

可以写一个工具类来存放权限相关的操作,以便后续扩展。


/*** 权限获取工具类*/
public class SecurityUtils {/*** 生成BCryptPasswordEncoder密码** @param password 密码* @return 加密字符串*/public static String encryptPassword(String password) {BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();return passwordEncoder.encode(password);}/*** 判断密码是否相同** @param rawPassword     真实密码* @param encodedPassword 加密后字符* @return 结果*/public static boolean matchesPassword(String rawPassword, String encodedPassword) {BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();return passwordEncoder.matches(rawPassword, encodedPassword);}
}

注册时,直接调用工具类SecurityUtils来加密密码

/*** 注册*/
public void register(RegisterBody param) {// 注册用户信息User user = new User();user.setUserName(param.getUsername());user.setPassword(SecurityUtils.encryptPassword(param.getPassword()));// 入库
}

登陆时,直接调用SecurityUtils来验密

/*** 登录*/
public User login(LoginBody form) {String username = form.getUsername();// 前端密码RSA加密,这里需要调用自定义工具类RSAUtil.decodeValue方法解密String password = RSAUtil.decodeValue(form.getPassword());// 查询用户信息User user = remoteUserService.getUserInfo(username);// 验密if (!SecurityUtils.matchesPassword(password, user.getPassword())) {// 更新用户密码错误次数以及密码错误锁定时间} else {// 登录成功清空密码登录错误次数}

http://www.lryc.cn/news/291859.html

相关文章:

  • 更新至2023年,2002-2023年3月中国国债发行数据
  • 2024最新版TypeScript安装使用指南
  • 国外知名的农业机器人公司
  • 【EI会议征稿中|ACM出版】#先投稿,先送审#第三届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2024)​
  • 【笔试常见易错选择题01】else、表达式、二维数组、%m.ns、%m.nf、常量指针和指针常量、宏定义、传参、数组越界、位段
  • Unity中常见的单词
  • 【仅需一步,1分钟极速开服】幻兽帕鲁保姆级教程
  • Zoho Mail 2023:回顾过去,展望未来:不断进化的企业级邮箱解决方案
  • python执行linux系统命令的三种方式
  • 协会认证!百望云荣获信创工委会年度“卓越贡献成员单位”称号
  • 神经网络激活函数到底是什么?
  • 【智慧工业】东胜物联定位与跟踪解决方案,为方案商提供蓝牙网关、信标等物联网智能硬件设备
  • C#中使用OpenCvSharp4库读取本地图像并显示
  • Stable Diffusion系列(四):提示词规则与使用
  • vue3动态循环引入本地静态图片资源
  • k8s从私有库harbor中拉取镜像
  • HCIA-Datacom实验指导手册:4.2 实验二:AAA配置实验
  • 黑马程序员前端web入门:新浪新闻
  • 力扣_字符串2—最长有效括号
  • 小程序接入企业微信「联系我」功能
  • jdk17新特性—— 密封类(Sealed Classes)
  • 【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的HA高可用解决方案
  • 计算机网络-物理层设备(中继器 集线器)
  • PaddleDetection学习4——使用Paddle-Lite和OpencCV在 Android 上实现实时的人脸检测(java)
  • mkcert的安装和使用,5分学会在本地开启localhost的https访问方式
  • RHCE DNS域名解析服务器
  • 创建表与删除表(六)
  • 微信开发者工具 git 拉取 failed invalid authentication scheme
  • (4)Elastix图像配准:3D图像
  • windows安装oracle之后怎么连接使用