nacos配置敏感数据加密简单使用jasypt(亲测有效)

1.相关依赖

        <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>3.0.5</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>

2.配置到properties文件或者yml文件上

#自定义 加密因子
jasypt.encryptor.password = ALK9382LDF234UIJ79GJ0F
#官方默认的加密算法是 PBEWITHHMACSHA512ANDAES_256 但是如果用的是jdk1.8 不支持,需要改成 PBEWithMD5AndDES
jasypt.encryptor.algorithm = PBEWITHHMACSHA512ANDAES_256
# 配置格式(不写默认ENC)前后缀
jasypt.encryptor.property.prefix= ENC[
jasypt.encryptor.property.suffix= ]
jasypt:
  encryptor:
    #自定义 加密因子。随便写
    password: ALK9382LDF234UIJ79GJ0F5HD
    # 官方默认的加密算法是 PBEWITHHMACSHA512ANDAES_256 但是如果用的是jdk1.8 不支持需要改成 PBEWithMD5AndDES
    algorithm: PBEWithMD5AndDES
    # 配置格式(不写默认ENC)
    property:
      prefix: ENC[
      suffix: ]

3.测试,获取加密后的密码

4.配置到nacos上properties文件形式,也可以yml文件上只是格式换成yml格式,

5.服务启动类上添加@EnableEncryptableProperties

@EnableEncryptableProperties
@SpringBootApplication
public class TestApplication {
    public static void main(String[] args) {
        SpringApplication.run(BusinessApplication.class, args);    }
}

### JasyptNacos中实现配置加密的方法 #### 1. 添加依赖 为了在项目中使用Jasypt库,需要先引入Maven或Gradle依赖。以下是Maven的依赖配置: ```xml <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.5</version> </dependency> ``` 此依赖会自动集成到Spring Boot应用程序中,并提供对加密和解密的支持[^1]。 --- #### 2. 配置Jasypt参数 在`application.properties`或`application.yml`文件中添加Jasypt的相关配置。这些配置用于指定加密算法以及密码密钥。 ##### 示例:`application.properties` ```properties # 设置加密器密码 jasypt.encryptor.password=jasypt-secret-key # 设置默认加密算法 (可选,默认为 PBEWithMD5AndDES) jasypt.encryptor.algorithm=PBEWithMD5AndTripleDES ``` 如果希望提高安全性,可以选择更强的加密算法,例如`PBEWithSHA256And256BitAES-CBC-BC`[^2]。 --- #### 3. 加密敏感数据 对于需要保护的敏感配置项(如数据库密码),可以通过命令行工具或其他方式对其进行加密。假设要加密的内容是`my-password`,可以运行以下命令完成加密过程: ```bash java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI \ input="my-password" password="jasypt-secret-key" algorithm=PBEWithMD5AndTripleDES ``` 上述命令将返回一个类似于`ENC(dY3ZXhFrW9sicIXYkZS+K9ApRXpOWCEJ)`的结果。将其存储到Nacos配置中心对应的键值对中。 --- #### 4. 动态刷新与解密问题解决 当从Nacos拉取配置并尝试动态刷新时,可能会遇到无法正确解密的情况。这是因为某些场景下,Spring容器未能及时更新上下文中已注册的Bean实例。针对这一问题,可通过自定义监听器的方式手动触发解密逻辑[^3]。 ##### 自定义监听器代码示例 ```java import com.alibaba.nacos.api.config.listener.Listener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class CustomConfigListener { @Autowired private Environment environment; // Spring环境对象 public Listener getListener() { return new Listener() { @Override public void receiveConfigInfo(String configInfo) { try { // 手动解析并重新加载配置 String decryptedValue = decryptSensitiveData(configInfo); System.out.println("Decrypted Value: " + decryptedValue); // 更新至Spring环境中... } catch (Exception e) { e.printStackTrace(); } } @Override public Executor getExecutor() { return null; } }; } private String decryptSensitiveData(String encryptedData) throws Exception { StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); encryptor.setPassword(environment.getProperty("jasypt.encryptor.password")); return encryptor.decrypt(encryptedData.replace("ENC(", "").replace(")", "")); } } ``` 通过这种方式可以在每次接收到新的配置变更通知时主动调用解密函数。 --- #### 5. 试验证 启动服务后访问Nacos控制台设置如下内容: ```plaintext key=my-db-password value=ENC(dY3ZXhFrW9sicIXYkZS+K9ApRXpOWCEJ) ``` 程序内部读取该值时应能成功还原成明文形式 `my-password`。 --- ### 注意事项 - **性能开销**:频繁加解密操作可能带来一定计算成本,请评估业务需求合理选用强度适中的算法。 - **秘钥管理**:务必妥善保管`jasypt.encryptor.password`以防泄露风险。 - **兼容性试**:不同框架版本间可能存在行为差异建议充分联调确认无误后再投入生产环境部署。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值