Spring Boot 敏感信息入库加密全面解决方案
在当今数据驱动的时代,保护用户隐私数据已成为系统设计的必备要求。本文将详细介绍 Spring Boot 应用中敏感数据加密存储的完整方案,涵盖从基础实现到生产级落地的全流程。
一、加密方案选型
1.1 常见加密类型对比
加密类型 | 特点 | 适用场景 | 代表实现 |
---|---|---|---|
对称加密 | 加解密使用相同密钥,性能高 | 需要可逆解密的敏感数据 | AES、DES |
非对称加密 | 公私钥分离,安全性更高 | 密钥交换、数字签名 | RSA |
哈希算法 | 不可逆,适合密码存储 | 用户密码保护 | BCrypt、PBKDF2 |
国密算法 | 国家密码局标准 | 政府、金融等合规场景 | SM4 |
1.2 推荐组合方案
- 密码类数据:BCrypt/PBKDF2(单向哈希)
- 身份证/手机号:AES-256(对称加密)
- 金融数据:考虑国密SM4算法
二、核心实现方案
2.1 JPA/Hibernate 加密方案
2.1.1 基于 AttributeConverter
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import javax.persistence.*;
import java.util.Base64;
@Converter
public class CryptoConverter implements AttributeConverter<String, String> {
private static final String AES_KEY = "your-256-bit-secret";
private static final String ALGORITHM = "AES/ECB/PKCS5Padding";
@Override
public String convertToDatabaseColumn(String attribute) {
try {
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, generateKey());
return Base64.getEncoder().encodeToString(
cipher.doFinal(attribute.getBytes()));
} catch (Exception e) {
throw new IllegalStateException("加密失败", e);
}
}
@Override
public String convertToEntityAttribute(String dbData) {
try {
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, generateKey());
return new