系列导读本篇将深入讲解数据安全与加密的核心方案与最佳实践。文章目录目录一、数据安全概述1.1 数据安全三要素1.2 数据分类二、加密算法2.1 对称加密2.2 非对称加密2.3 哈希算法三、数据脱敏3.1 脱敏规则3.2 脱敏实现3.3 注解脱敏四、密钥管理4.1 密钥管理方案4.2 Vault 集成总结目录一、数据安全概述二、加密算法三、数据脱敏四、密钥管理总结一、数据安全概述1.1 数据安全三要素CIA 三要素 - 机密性 (Confidentiality)数据不被泄露 - 完整性 (Integrity)数据不被篡改 - 可用性 (Availability)数据随时可用1.2 数据分类级别说明示例公开可公开商品信息内部仅内部使用员工信息敏感需要保护手机号、身份证机密高度保护密码、密钥二、加密算法2.1 对称加密// AES 加密publicclassAESUtil{privatestaticfinalStringALGORITHMAES;privatestaticfinalStringTRANSFORMATIONAES/CBC/PKCS5Padding;publicstaticStringencrypt(Stringdata,Stringkey)throwsException{SecretKeySpecsecretKeynewSecretKeySpec(key.getBytes(),ALGORITHM);CiphercipherCipher.getInstance(TRANSFORMATION);cipher.init(Cipher.ENCRYPT_MODE,secretKey,newIvParameterSpec(newbyte[16]));byte[]encryptedcipher.doFinal(data.getBytes());returnBase64.getEncoder().encodeToString(encrypted);}publicstaticStringdecrypt(StringencryptedData,Stringkey)throwsException{SecretKeySpecsecretKeynewSecretKeySpec(key.getBytes(),ALGORITHM);CiphercipherCipher.getInstance(TRANSFORMATION);cipher.init(Cipher.DECRYPT_MODE,secretKey,newIvParameterSpec(newbyte[16]));byte[]decryptedcipher.doFinal(Base64.getDecoder().decode(encryptedData));returnnewString(decrypted);}}2.2 非对称加密// RSA 加密publicclassRSAUtil{publicstaticKeyPairgenerateKeyPair()throwsException{KeyPairGeneratorgeneratorKeyPairGenerator.getInstance(RSA);generator.initialize(2048);returngenerator.generateKeyPair();}publicstaticStringencrypt(Stringdata,PublicKeypublicKey)throwsException{CiphercipherCipher.getInstance(RSA);cipher.init(Cipher.ENCRYPT_MODE,publicKey);byte[]encryptedcipher.doFinal(data.getBytes());returnBase64.getEncoder().encodeToString(encrypted);}publicstaticStringdecrypt(StringencryptedData,PrivateKeyprivateKey)throwsException{CiphercipherCipher.getInstance(RSA);cipher.init(Cipher.DECRYPT_MODE,privateKey);byte[]decryptedcipher.doFinal(Base64.getDecoder().decode(encryptedData));returnnewString(decrypted);}}2.3 哈希算法// 密码哈希publicclassPasswordUtil{publicstaticStringhash(Stringpassword){returnBCrypt.hashpw(password,BCrypt.gensalt(12));}publicstaticbooleanverify(Stringpassword,Stringhash){returnBCrypt.checkpw(password,hash);}}三、数据脱敏3.1 脱敏规则数据类型脱敏规则示例手机号保留前3后4138****8888身份证保留前3后4110***********1234银行卡保留后4位************1234姓名保留姓张**3.2 脱敏实现// 脱敏工具类publicclassMaskUtils{publicstaticStringmaskPhone(Stringphone){if(StringUtils.isEmpty(phone)||phone.length()!11){returnphone;}returnphone.substring(0,3)****phone.substring(7);}publicstaticStringmaskIdCard(StringidCard){if(StringUtils.isEmpty(idCard)||idCard.length()8){returnidCard;}returnidCard.substring(0,3)***********idCard.substring(idCard.length()-4);}publicstaticStringmaskBankCard(StringbankCard){if(StringUtils.isEmpty(bankCard)||bankCard.length()8){returnbankCard;}return************bankCard.substring(bankCard.length()-4);}}3.3 注解脱敏// 脱敏注解Retention(RetentionPolicy.RUNTIME)Target(ElementType.FIELD)publicinterfaceSensitive{SensitiveTypevalue();}// 脱敏序列化publicclassSensitiveSerializerextendsJsonSerializerString{Overridepublicvoidserialize(Stringvalue,JsonGeneratorgen,SerializerProviderprovider)throwsIOException{Sensitivesensitivegen.getCurrentValue().getClass().getDeclaredField(gen.getOutputContext().getCurrentName()).getAnnotation(Sensitive.class);if(sensitive!null){switch(sensitive.value()){casePHONE:gen.writeString(MaskUtils.maskPhone(value));break;caseID_CARD:gen.writeString(MaskUtils.maskIdCard(value));break;default:gen.writeString(value);}}else{gen.writeString(value);}}}四、密钥管理4.1 密钥管理方案┌─────────────────────────────────────────────────────────────┐ │ 密钥管理架构 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 应用 ──► 密钥管理服务 (KMS) ──► HSM (硬件安全模块) │ │ │ │ 功能 │ │ - 密钥生成 │ │ - 密钥存储 │ │ - 密钥轮换 │ │ - 密钥销毁 │ │ │ └─────────────────────────────────────────────────────────────┘4.2 Vault 集成// Vault 配置ConfigurationpublicclassVaultConfig{BeanpublicVaultTemplatevaultTemplate(){VaultEndpointendpointVaultEndpoint.create(vault.example.com,443);endpoint.setScheme(https);returnnewVaultTemplate(endpoint,newTokenAuthentication(hvs.xxx));}}// 使用 VaultServicepublicclassSecretService{AutowiredprivateVaultTemplatevaultTemplate;publicStringgetSecret(Stringpath){VaultResponseresponsevaultTemplate.read(path);return(String)response.getData().get(value);}publicvoidstoreSecret(Stringpath,Stringvalue){MapString,StringdatanewHashMap();data.put(value,value);vaultTemplate.write(path,data);}}总结✅数据安全概述CIA 三要素、数据分类✅加密算法AES、RSA、哈希✅数据脱敏规则、实现、注解✅密钥管理KMS、Vault 集成本系列完结作者刘~浪地球系列安全架构四更新时间2026-04-22