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";@Overridepublic 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);}}@Overridepublic String convertToEntityAttribute(String dbData) {try {Cipher cipher = Cipher.getInstance(ALGORITHM);cipher.init(Cipher.DECRYPT_MODE, generateKey());return new