java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > nacos配置ENC(...)加密方式

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

作者:柴华松

文章介绍在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)。

总结

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

您可能感兴趣的文章:
阅读全文