数据库密码加密

添加jar包

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

构建工具类

public class PasswordUtil {

    private static final BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();

    // 加密密码
    public static String encode(String rawPassword) {
        return encoder.encode(rawPassword);
    }

    // 校验密码(输入明文密码,与数据库密文比对)
    public static boolean matches(String rawPassword, String encodedPassword) {
        return encoder.matches(rawPassword, encodedPassword);
    }
}

具体使用

if (!PasswordUtil.matches(password, user.getPassword())) {
	throw new BusinessException(Code.PROJECT_BUSINESS_ERROR, "密码错误,请重新输入");
}

优缺点

优点:
抗彩虹表攻击:BCrypt 在加密时会自动生成随机盐值并嵌入到密文中,无需单独存储盐值,有效抵御彩虹表攻击。
计算资源消耗可配置:通过调整strength参数(默认 10),可以增加计算成本,抵御暴力破解。随着硬件性能提升,可适当提高强度。
自适应安全:BCrypt 算法内置了对未来计算能力增长的适应性设计,通过增加计算复杂度应对算力提升。
广泛使用与审计:BCrypt 是行业标准算法,被 OWASP 等安全组织推荐,代码经过大量安全审计。
防止时序攻击:matches方法使用固定时间比较算法,避免通过比较时间差异推测密码信息。
缺点:
计算开销大:高strength值会显著增加服务器负载,影响系统响应速度,尤其在高并发场景下需要权衡性能。
密文长度较长:BCrypt 生成的密文固定为 60 个字符,相比其他算法(如 Scrypt)占用更多存储空间。
不适合资源受限环境:在移动设备或嵌入式系统中,高强度加密可能导致不可接受的延迟。
算法演进限制:虽然目前安全,但长期来看无法像 Argon2 等新型算法那样灵活调整参数以应对量子计算等未来威胁。
密钥扩展能力较弱:对于需要处理短密码的场景,BCrypt 的密钥扩展机制不如专门设计的 KDF(如 PBKDF2)完善。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值