news 2026/4/27 23:45:51

【架构实战】数据加密架构:传输加密+存储加密

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【架构实战】数据加密架构:传输加密+存储加密

涓€銆佹暟鎹姞瀵嗘杩?

鏁版嵁鍔犲瘑鏄繚鎶ゆ暟鎹畨鍏ㄧ殑閲嶈鎵嬫锛?
*鍔犲瘑鍦烘櫙锛?

  • 浼犺緭鍔犲瘑锛圚TTPS锛?- 瀛樺偍鍔犲瘑锛堟晱鎰熸暟鎹級
  • 瀵嗛挜绠$悊

浜屻€佷紶杈撳姞瀵?

1. HTTPS閰嶇疆

@ConfigurationpublicclassSSLConfig{@BeanpublicTomcatServletWebServerFactoryservletContainer(){TomcatServletWebServerFactorytomcat=newTomcatServletWebServerFactory();tomcat.setProtocol("org.apache.coyote.http11.Http11NioProtocol");SSLssl=newSSL();ssl.setKeyStore("classpath:keystore.p12");ssl.setKeyStorePassword("password");ssl.setKeyStoreType("PKCS12");Connectorconnector=newConnector("org.apache.coyote.http11.Http11NioProtocol");connector.setScheme("https");connector.setSecure(true);connector.setPort(8443);connector.setProperty("sslProtocol","TLS");tomcat.addAdditionalTomcatConnectors(connector);returntomcat;}}

2. 璇佷功閰嶇疆

# application.ymlserver:ssl:enabled:truekey-store:classpath:keystore.p12key-store-password:passwordkey-store-type:PKCS12key-alias:mycert

涓夈€佸绉板姞瀵?

1. AES鍔犲瘑

@ServicepublicclassAESEncryptionService{privatestaticfinalStringALGORITHM="AES";privatestaticfinalStringTRANSFORMATION="AES/ECB/PKCS5Padding";@Value("${encryption.aes.key}")privateStringsecretKey;publicStringencrypt(Stringplaintext){try{SecretKeySpeckeySpec=newSecretKeySpec(secretKey.getBytes(),ALGORITHM);Ciphercipher=Cipher.getInstance(TRANSFORMATION);cipher.init(Cipher.ENCRYPT_MODE,keySpec);byte[]encrypted=cipher.doFinal(plaintext.getBytes());returnBase64.getEncoder().encodeToString(encrypted);}catch(Exceptione){thrownewRuntimeException("鍔犲瘑澶辫触",e);}}publicStringdecrypt(Stringciphertext){try{SecretKeySpeckeySpec=newSecretKeySpec(secretKey.getBytes(),ALGORITHM);Ciphercipher=Cipher.getInstance(TRANSFORMATION);cipher.init(Cipher.DECRYPT_MODE,keySpec);byte[]decrypted=cipher.doFinal(Base64.getDecoder().decode(ciphertext));returnnewString(decrypted);}catch(Exceptione){thrownewRuntimeException("瑙e瘑澶辫触",e);}}}

2. 瀛楁鍔犲瘑

@ComponentpublicclassFieldEncryptionConverterimplementsAttributeConverter<String,String>{@AutowiredprivateAESEncryptionServiceencryptionService;@OverridepublicStringconvertToDatabaseColumn(Stringattribute){returnStringUtils.isEmpty(attribute)?attribute:encryptionService.encrypt(attribute);}@OverridepublicStringconvertToEntityAttribute(StringdbData){returnStringUtils.isEmpty(dbData)?dbData:encryptionService.decrypt(dbData);}}

鍥涖€侀潪瀵圭О鍔犲瘑

1. RSA鍔犲瘑

@ServicepublicclassRSAEncryptionService{publicKeyPairgenerateKeyPair()throwsNoSuchAlgorithmException{KeyPairGeneratorgenerator=KeyPairGenerator.getInstance("RSA");generator.initialize(2048);returngenerator.generateKeyPair();}publicStringencrypt(Stringplaintext,PublicKeypublicKey)throwsException{Ciphercipher=Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE,publicKey);byte[]encrypted=cipher.doFinal(plaintext.getBytes());returnBase64.getEncoder().encodeToString(encrypted);}publicStringdecrypt(Stringciphertext,PrivateKeyprivateKey)throwsException{Ciphercipher=Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE,privateKey);byte[]decrypted=cipher.doFinal(Base64.getDecoder().decode(ciphertext));returnnewString(decrypted);}}

2. 鏁板瓧绛惧悕

@ServicepublicclassSignatureService{publicStringsign(Stringdata,PrivateKeyprivateKey)throwsException{Signaturesignature=Signature.getInstance("SHA256withRSA");signature.initSign(privateKey);signature.update(data.getBytes());returnBase64.getEncoder().encodeToString(signature.sign());}publicbooleanverify(Stringdata,StringsignatureStr,PublicKeypublicKey)throwsException{Signaturesignature=Signature.getInstance("SHA256withRSA");signature.initVerify(publicKey);signature.update(data.getBytes());returnsignature.verify(Base64.getDecoder().decode(signatureStr));}}

浜斻€佸搱甯屽姞瀵?

1. 瀵嗙爜鍝堝笇

@ServicepublicclassPasswordHashService{publicStringhashPassword(Stringpassword){returnBCryptPasswordEncoder.encode(password);}publicbooleanverifyPassword(Stringpassword,StringhashedPassword){returnnewBCryptPasswordEncoder().matches(password,hashedPassword);}}

2. 鏁版嵁瀹屾暣鎬?

@ServicepublicclassHashService{publicStringmd5(Stringdata){returnDigestUtils.md5Hex(data);}publicStringsha256(Stringdata){returnDigestUtils.sha256Hex(data);}publicStringhmacSha256(Stringdata,Stringkey){try{SecretKeySpecsecretKey=newSecretKeySpec(key.getBytes(),"HmacSHA256");Macmac=Mac.getInstance("HmacSHA256");mac.init(secretKey);byte[]hmac=mac.doFinal(data.getBytes());returnBase64.getEncoder().encodeToString(hmac);}catch(Exceptione){thrownewRuntimeException(e);}}}

鍏€佸瘑閽ョ鐞?

1. 瀵嗛挜杞崲

@ServicepublicclassKeyRotationService{@Value("${encryption.key.version}")privateintcurrentVersion;publicvoidrotateKey()throwsException{// 1. 鐢熸垚鏂板瘑閽? KeyPair newKeyPair = rsaService.generateKeyPair();// 2. 鍔犲瘑鏃у瘑閽ョ殑鏁版嵁Map<Integer,String>encryptedKeys=newHashMap<>();// ... 浣跨敤鏂板瘑閽ュ姞瀵嗘棫瀵嗛挜// 3. 瀛樺偍鏂板瘑閽? keyStore.store(newKeyPair, currentVersion + 1);// 4. 鏇存柊鐗堟湰鍙? currentVersion++;}}

2. 瀵嗛挜鎵樼

@ConfigurationpublicclassKMSConfig{@BeanpublicAWSSimpleSystemsManagementawsSSM(){returnAWSSimpleSystemsManagementClientBuilder.defaultClient();}}@ServicepublicclassKMSKeyService{@AutowiredprivateAWSSimpleSystemsManagementawsSSM;publicStringgetKey(StringkeyId){GetParameterRequestrequest=newGetParameterRequest().withName(keyId).withWithDecryption(true);returnawsSSM.getParameter(request).getParameter().getValue();}}

涓冦€佹晱鎰熸暟鎹繚鎶?

1. 瀛楁鑴辨晱

@ComponentpublicclassSensitiveDataFilter{@SensitiveField(type=MaskingType.PHONE)publicStringmaskPhone(Stringphone){if(phone==null)returnnull;returnphone.substring(0,3)+"****"+phone.substring(7);}@SensitiveField(type=MaskingType.ID_CARD)publicStringmaskIdCard(StringidCard){if(idCard==null)returnnull;returnidCard.substring(0,6)+"********"+idCard.substring(14);}}

2. 鍏ㄩ摼璺姞瀵?

@ComponentpublicclassEndToEndEncryptionService{// 绔埌绔姞瀵嗙ず渚? public String encryptForRecipient(String plaintext, String recipientPublicKey)throwsException{// 1. 鐢熸垚闅忔満瀵圭О瀵嗛挜KeyGeneratorkeyGen=KeyGenerator.getInstance("AES");keyGen.init(256);SecretKeysymmetricKey=keyGen.generateKey();// 2. 鐢ㄥ绉板瘑閽ュ姞瀵嗘暟鎹? Cipher aesCipher = Cipher.getInstance("AES");aesCipher.init(Cipher.ENCRYPT_MODE,symmetricKey);byte[]encryptedData=aesCipher.doFinal(plaintext.getBytes());// 3. 鐢ㄦ帴鏀惰€呭叕閽ュ姞瀵嗗绉板瘑閽? Cipher rsaCipher = Cipher.getInstance("RSA");rsaCipher.init(Cipher.ENCRYPT_MODE,getPublicKey(recipientPublicKey));byte[]encryptedKey=rsaCipher.doFinal(symmetricKey.getEncoded());// 4. 杩斿洖鍔犲瘑鍚庣殑鏁版嵁鍜屽瘑閽? return Base64.getEncoder().encodeToString(encryptedData) + ":" +Base64.getEncoder().encodeToString(encryptedKey);}}

鍏€佹€荤粨

鏁版嵁鍔犲瘑鏄繚鎶ゆ暟鎹畨鍏ㄧ殑鍩虹锛?

  • 浼犺緭鍔犲瘑锛欻TTPS/TLS
  • 瀛樺偍鍔犲瘑锛欰ES/RSA
  • 瀵嗛挜绠$悊锛氳疆鎹?鎵樼
  • 鏁忔劅淇濇姢锛氳劚鏁?鍏ㄩ摼璺姞瀵?

*涓汉瑙傜偣锛屼粎渚涘弬鑰?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/11 9:13:34

21.soem 1.4 无法进入OP解决

从站&#xff1a;SSC 5.12主站&#xff1a;SOEM 1.4这是SOEM和SSC 5.12的老问题。是大小端转换问题。解决方法&#xff1a;修改SOEM的代码&#xff1a;int ecx_readPDOmapCA(ecx_contextt *context, uint16 Slave, int Thread_n, int *Osize, int *Isize) {int wkc, rdl;int re…

作者头像 李华
网站建设 2026/4/11 9:13:19

Zemax新手必看:从零开始设计808nm单透镜的完整流程(附BK7材料参数)

Zemax新手实战&#xff1a;808nm激光单透镜设计全流程与BK7材料深度解析 刚接触Zemax的光学设计新手往往会被各种参数设置和优化方法弄得晕头转向。本文将以808nm激光器常用的单透镜设计为例&#xff0c;手把手带你完成从理论计算到软件实操的全过程。不同于简单的教程复述&…

作者头像 李华
网站建设 2026/4/11 9:13:19

大疆Osmo Pocket 4来袭:1英寸传感器能否碾压同行

你是否还在为Vlog画质不够清晰而烦恼&#xff1f;是否经常在暗光环境下拍出噪点满满的视频&#xff1f;大疆最新发布的Osmo Pocket 4或许能解决这些问题。这款搭载1英寸传感器的口袋云台相机&#xff0c;究竟能否碾压同行&#xff1f;让我们一探究竟。硬件配置全面升级大疆Osmo…

作者头像 李华
网站建设 2026/4/11 9:13:10

语音识别新选择:Qwen3-ASR-1.7B在客服录音转写中的应用

语音识别新选择&#xff1a;Qwen3-ASR-1.7B在客服录音转写中的应用 1. 客服录音转写的行业痛点 在客服中心日常运营中&#xff0c;录音转写是一项耗时耗力的工作。传统的人工转录方式存在几个明显痛点&#xff1a; 效率低下&#xff1a;1小时的录音需要3-4小时人工转写成本高…

作者头像 李华
网站建设 2026/4/11 9:12:28

Phi-3-mini-128k-instruct部署指南:Windows系统下的开发环境搭建

Phi-3-mini-128k-instruct部署指南&#xff1a;Windows系统下的开发环境搭建 如果你是一位Windows开发者&#xff0c;想在自己的电脑上体验和调用Phi-3-mini-128k-instruct这样的大语言模型&#xff0c;可能会觉得有点无从下手。毕竟&#xff0c;很多AI教程都默认在Linux环境下…

作者头像 李华
网站建设 2026/4/11 9:11:28

Windows热键冲突检测工具Hotkey Detective技术解析与实践指南

Windows热键冲突检测工具Hotkey Detective技术解析与实践指南 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective Hotkey Detec…

作者头像 李华