nacos配置ENC(...)加密实现方式

 更新时间:2025年09月26日 08:51:36   作者:柴华松  
文章介绍在SpringBoot中使用Jasypt加密敏感配置(如数据库密码),通过添加依赖、配置密钥、定义自定义加密器Bean实现加密解密,强调密钥安全、日志保密及算法选择,确保配置信息安全

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返回图片的实现

    这篇文章主要介绍了SpringBoot使用@ResponseBody返回图片的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 关于IDEA配置文件字符集的问题

    关于IDEA配置文件字符集的问题

    这篇文章主要介绍了关于IDEA配置文件字符集的问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Java实现全图背景水印的示例详解

    Java实现全图背景水印的示例详解

    这篇文章主要为大家详细介绍了如何利用Java实现全图背景水印的方法,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下
    2023-02-02
  • Java Web开发中的分页与参数校验举例详解

    Java Web开发中的分页与参数校验举例详解

    这篇文章主要介绍了JavaWeb开发中的分页设计和参数校验,分页设计通过分页查询参数优化查询性能,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-02-02
  • Java 限制子类访问的方法分析

    Java 限制子类访问的方法分析

    这篇文章主要介绍了Java 限制子类访问的方法,结合实例形式分析了java类的继承与访问相关操作技巧与使用注意事项,需要的朋友可以参考下
    2019-09-09
  • Spring Boot多数据源事务@DSTransactional的使用详解

    Spring Boot多数据源事务@DSTransactional的使用详解

    本文主要介绍了Spring Boot多数据源事务@DSTransactional的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • JAVA 多态 由浅及深介绍

    JAVA 多态 由浅及深介绍

    JAVA 多态 由浅及深介绍,什么是多态?多态的详细解释,多态的好处,多态的实际运用等
    2013-03-03
  • SpringBoot更改启动图标实现方式

    SpringBoot更改启动图标实现方式

    文章介绍了如何在Spring Boot应用中修改启动图标,首先,可以使用原始的图标样式或从指定的URL获取新的图标样式,并将其保存为banner.txt文件,在banner.txt文件中,可以配置颜色和版本号等信息,此外,还可以通过配置文件指定自定义的图标路径,使用文本或图片格式
    2025-11-11
  • 普通对象使用spring容器中的对象的实现方法

    普通对象使用spring容器中的对象的实现方法

    这篇文章主要介绍了普通对象使用spring容器中的对象的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • Java服务调用失败报Service com.oneinfinite.adflow.api.service.TestService未找到的解决方法

    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

最新评论