Spring Boot 敏感信息入库加密全面解决方案

发布于:2025-07-14 ⋅ 阅读:(15) ⋅ 点赞:(0)

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 

网站公告

今日签到

点亮在社区的每一天
去签到