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)。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SpringBoot使用@ResponseBody返回图片的实现
这篇文章主要介绍了SpringBoot使用@ResponseBody返回图片的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-11-11
Spring Boot多数据源事务@DSTransactional的使用详解
本文主要介绍了Spring Boot多数据源事务@DSTransactional的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-06-06
Java服务调用失败报Service com.oneinfinite.adflow.api.service.T
在Java开发中,服务调用是常见的操作,尤其是在微服务架构中,然而,服务调用过程中可能会遇到各种问题,下面我们来看看如何解决Service com.oneinfinite.adflow.api.service.TestService with version 0.0.0 not found的问题吧2025-03-03


最新评论