数据库密码加密
数据库密码加密
- 添加jar包
- 构建工具类
- 具体使用
- 优缺点
添加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)完善。