nacos配置ENC(...)加密實現(xiàn)方式
nacos配置ENC(...)加密方式
如:
spring.datasource.password=ENC(xxxx)
在 Spring Boot 項目中,Jasypt 是一個常用的加密和解密工具,用于安全地管理敏感信息(例如數(shù)據(jù)庫密碼)。
從日志來看,jasypt 初始化了默認(rèn)的加密器 Default String Encryptor,但您想自定義 jasyptStringEncryptor 解密邏輯。
以下是實現(xiàn)步驟:
1.添加依賴
確保在 pom.xml 或 build.gradle 中包含 Jasypt 的依賴:
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.5</version> <!-- 替換為合適版本 -->
</dependency>
2.配置 jasypt 密鑰
在 application.properties 或 application.yml 文件中配置加密密鑰:
jasypt.encryptor.password=your-encryption-password
注意: your-encryption-password 是用于加密和解密的密鑰,建議不要硬編碼,可通過環(huán)境變量注入。
3.定義自定義 jasyptStringEncryptor
您可以在配置類中自定義一個 StringEncryptor Bean:
import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.salt.RandomSaltGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class JasyptConfig {
@Bean(name = "jasyptStringEncryptor")
public StringEncryptor stringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setPoolSize(4); // 設(shè)置線程池大小
encryptor.setPassword("your-encryption-password"); // 配置密鑰
encryptor.setAlgorithm("PBEWithMD5AndDES"); // 加密算法
encryptor.setSaltGenerator(new RandomSaltGenerator());
return encryptor;
}
}
4.加密和解密示例
加密:
使用 Jasypt 工具對敏感數(shù)據(jù)加密:
# 示例加密命令 java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI \ input="your-secret-password" \ password="your-encryption-password" \ algorithm="PBEWithMD5AndDES"
輸出: ENC(your-encrypted-string),將其用于配置文件。
解密:
當(dāng)配置文件中包含加密數(shù)據(jù)(例如數(shù)據(jù)庫密碼)時:
spring.datasource.password=ENC(your-encrypted-string)
jasyptStringEncryptor 會自動解密。
5.驗證日志
啟動項目,日志中應(yīng)該顯示 jasyptStringEncryptor 已被使用:
INFO c.u.jasyptspringboot.encryptor.CustomStringEncryptor - String Encryptor custom Bean found with name ‘jasyptStringEncryptor’.
6.手動調(diào)用解密(可選)
如果需要在代碼中手動解密:
import org.jasypt.encryption.StringEncryptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class DecryptionService {
@Autowired
private StringEncryptor stringEncryptor;
public String decrypt(String encryptedText) {
return stringEncryptor.decrypt(encryptedText);
}
}
注意事項:
1. 密鑰安全性:不要將密鑰硬編碼到代碼中,建議使用環(huán)境變量或密鑰管理工具。
2. 日志安全性:不要在日志中打印明文數(shù)據(jù)。
3. 加密算法:根據(jù)需求選擇更強(qiáng)的加密算法(如 AES)。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot讀取yml文件中配置數(shù)組的2種方法
這篇文章主要介紹了SpringBoot讀取yml文件中配置數(shù)組的2種方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
Spring Boot 2.4新特性減少95%內(nèi)存占用問題
這篇文章主要介紹了Spring Boot 2.4新特性減少95%內(nèi)存占用問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
SpringCloud Config統(tǒng)一配置中心問題分析解決與客戶端動態(tài)刷新實現(xiàn)
springcloud config是一個解決分布式系統(tǒng)的配置管理方案。它包含了 client和server兩個部分,server端提供配置文件的存儲、以接口的形式將配置文件的內(nèi)容提供出去,client端通過接口獲取數(shù)據(jù)、并依據(jù)此數(shù)據(jù)初始化自己的應(yīng)用2022-10-10
使用HttpServletResponse對象獲取請求行信息
這篇文章主要介紹了使用HttpServletResponse對象獲取請求行信息,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
spring注入在有常量的情況下使用@AllArgsConstructor操作
這篇文章主要介紹了spring注入在有常量的情況下使用@AllArgsConstructor操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09

