nacos配置ENC(...)加密实现方式
作者:柴华松
nacos配置ENC(...)加密方式
如:
spring.datasource.password=ENC(xxxx)
在 Spring Boot 项目中,Jasypt 是一个常用的加密和解密工具,用于安全地管理敏感信息(例如数据库密码)。
从日志来看,jasypt 初始化了默认的加密器 Default String Encryptor,但您想自定义 jasyptStringEncryptor 解密逻辑。
以下是实现步骤:
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 是用于加密和解密的密钥,建议不要硬编码,可通过环境变量注入。
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); // 设置线程池大小 encryptor.setPassword("your-encryption-password"); // 配置密钥 encryptor.setAlgorithm("PBEWithMD5AndDES"); // 加密算法 encryptor.setSaltGenerator(new RandomSaltGenerator()); return encryptor; } }
4.加密和解密示例
加密:
使用 Jasypt 工具对敏感数据加密:
# 示例加密命令 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),将其用于配置文件。
解密:
当配置文件中包含加密数据(例如数据库密码)时:
spring.datasource.password=ENC(your-encrypted-string)
jasyptStringEncryptor 会自动解密。
5.验证日志
启动项目,日志中应该显示 jasyptStringEncryptor 已被使用:
INFO c.u.jasyptspringboot.encryptor.CustomStringEncryptor - String Encryptor custom Bean found with name ‘jasyptStringEncryptor’.
6.手动调用解密(可选)
如果需要在代码中手动解密:
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. 密钥安全性:不要将密钥硬编码到代码中,建议使用环境变量或密钥管理工具。
2. 日志安全性:不要在日志中打印明文数据。
3. 加密算法:根据需求选择更强的加密算法(如 AES)。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。