龙岩网站建设要多久,杭州app开发公司老铁帮,模板网站制作怎么样,浙江银安建设有限公司网站BCrypt是一种密码哈希函数#xff0c;BCrypt算法使用“盐”来加密密码#xff0c;这是一种随机生成的字符串#xff0c;可以在密码加密过程中使用#xff0c;以确保每次加密结果都不同。盐的使用增强了安全性#xff0c;因为攻击者需要花费更多的时间来破解密码。
下图为…BCrypt是一种密码哈希函数BCrypt算法使用“盐”来加密密码这是一种随机生成的字符串可以在密码加密过程中使用以确保每次加密结果都不同。盐的使用增强了安全性因为攻击者需要花费更多的时间来破解密码。
下图为使用BCrypt算法后的的密码结果值 下面讲一下注册登陆场景中如何使用BCrypt算法的。
首先确保项目中包含了Spring Security Crypto的依赖可以在pom.xml文件中添加Spring Security的依赖
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-security/artifactId
/dependency
Spring Security是一个广泛使用的身份验证和授权框架而Spring Security Crypto是其中的一个模块专门用于提供加密和安全相关的功能提供对称加密如AES和RSA、密钥生成和密码编码等功能。这个模块作为核心模块的一部分但不依赖于任何其他Spring Security或Spring代码。
在Spring Security Crypto中你可以使用BCryptPasswordEncoder类来进行BCrypt加密、验密。 可以写一个工具类来存放权限相关的操作以便后续扩展。 /*** 权限获取工具类*/
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 {// 登录成功清空密码登录错误次数}