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)。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 图解Java中插入排序算法的原理与实现

    图解Java中插入排序算法的原理与实现

    插入排序的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。本文将通过图片详解插入排序的原理及实现,需要的可以参考一下
    2022-08-08
  • SpringBoot读取yml文件中配置数组的2种方法

    SpringBoot读取yml文件中配置数组的2种方法

    这篇文章主要介绍了SpringBoot读取yml文件中配置数组的2种方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java中的显示锁ReentrantLock使用与原理详解

    Java中的显示锁ReentrantLock使用与原理详解

    这篇文章主要介绍了Java中的显示锁ReentrantLock使用与原理详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • springboot打包jar和war包的教程图解

    springboot打包jar和war包的教程图解

    这篇文章主要介绍了springboot打包jar和war包的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Spring Boot 2.4新特性减少95%内存占用问题

    Spring Boot 2.4新特性减少95%内存占用问题

    这篇文章主要介绍了Spring Boot 2.4新特性减少95%内存占用问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • SpringCloud Config统一配置中心问题分析解决与客户端动态刷新实现

    SpringCloud Config统一配置中心问题分析解决与客户端动态刷新实现

    springcloud config是一个解决分布式系统的配置管理方案。它包含了 client和server两个部分,server端提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client端通过接口获取数据、并依据此数据初始化自己的应用
    2022-10-10
  • Springboot中@Value的使用详解

    Springboot中@Value的使用详解

    这篇文章主要介绍了Springboot中@Value的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • SpringMvc中的Bean加载机制详解

    SpringMvc中的Bean加载机制详解

    这篇文章主要介绍了SpringMvc中的Bean加载机制详解,在Spring MVC中,Bean的作用主要是处理应用程序的业务逻辑和数据,例如,一个用户管理应用程序的Bean可能包括UserService、UserDao和UserController等,需要的朋友可以参考下
    2023-12-12
  • 使用HttpServletResponse对象获取请求行信息

    使用HttpServletResponse对象获取请求行信息

    这篇文章主要介绍了使用HttpServletResponse对象获取请求行信息,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • spring注入在有常量的情况下使用@AllArgsConstructor操作

    spring注入在有常量的情况下使用@AllArgsConstructor操作

    这篇文章主要介绍了spring注入在有常量的情况下使用@AllArgsConstructor操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09

最新评论