nacos配置加密简单实现Jaspyt

要在Nacos上实现配置加密,可以使用Jaspyt库来简化实现。Jaspyt是一个Java库,可以用来实现简单的加密和解密操作。

以下是在Nacos配置中使用Jaspyt进行加密的简单实现步骤:

步骤1:添加依赖项 在项目的构建文件pom.xml中添加Jaspyt库的依赖项。如果是有公共服务模块可以直接引入公共服务总任意模块的pom文件中

Maven:

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

步骤2:创建密钥 创建一个密钥,在应用程序中使用该密钥对配置进行加密和解密操作。设置配置

配置必须在其他配置之前生效执行 bootstrap.yml 比config.yml优先级高

jasypt:
  encryptor:
    bean: desencrypt # 指定加密方式bean
    password: mysalt

步骤3:解密配置 在应用程序中解密加密后的配置值。

//package common.core.nacos;  
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.StandardPBEByteEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

/**
 * @author sml
 */
@Configuration
public class EncryptDecryptConfig {
    @Value("${jasypt.encryptor.password:}")
    private String password;
    /**
     * Jasypt生成加密结果
     *
     * @param password 配置文件中设定的加密密码 jasypt.encryptor.password
     * @param value    待加密值
     * @return
     */
    public String encryptPwd(String password, String value) {
        PooledPBEStringEncryptor encryptOr = new PooledPBEStringEncryptor();
        encryptOr.setConfig(cryptOr(password));
        String result = encryptOr.encrypt(value);
        return result;
    }
    public String encrypt(String value) {
        PooledPBEStringEncryptor encryptOr = new PooledPBEStringEncryptor();
        encryptOr.setConfig(cryptOr(password));
        String result = encryptOr.encrypt(value);
        return result;
    }

    /**
     * 解密
     *
     * @param password 配置文件中设定的加密密码 jasypt.encryptor.password
     * @param value    待解密密文
     * @return
     */
    public String decyptPwd(String password, String value) {
        PooledPBEStringEncryptor encryptOr = new PooledPBEStringEncryptor();
        System.out.println("解密:"+cryptOr(password));
        encryptOr.setConfig(cryptOr(password));
        String result = encryptOr.decrypt(value);
        return result;
    }
    public  String decrypt( String value) {
        PooledPBEStringEncryptor encryptOr = new PooledPBEStringEncryptor();
        encryptOr.setConfig(cryptOr(password));
        String result = encryptOr.decrypt(value);
        return result;
    }

    /**
     * @param password salt
     * @return
     */
    public static SimpleStringPBEConfig cryptOr(String password) {
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(password);
        config.setAlgorithm(StandardPBEByteEncryptor.DEFAULT_ALGORITHM);
        config.setKeyObtentionIterations("1000");
        config.setPoolSize("1");
        config.setProviderName(null);
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setStringOutputType("base64");
        return config;
    }
      //这里复制需要加密的配置
 /*   public static void main(String[] args) {
        // 加密
        System.out.println(encryptPwd("mysalt", "加解密数据"));
        // 解密
        //mysql@1234
        System.out.println(decyptPwd("EbfYkitulv73I2p0mXI50JMXoaxZTKJ7", "bgWQ4OfVCUJ1ExsqNhGV+KKBgpx8alv+"));

        //root@1234
        System.out.println(decyptPwd("EbfYkitulv73I2p0mXI50JMXoaxZTKJ7", "tdHzge8YvviOJaiV/+P6uQ9wgB44D1aH"));
    }*/

}

配置4注入配置bean

//common.core.nacos;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.apache.commons.lang3.StringUtils;
import org.jasypt.encryption.StringEncryptor;

import javax.annotation.Resource;

/**
 * @author sml
 */
@Configuration("desencrypt")  //动态代理
public class JasyptStringEncryptor implements StringEncryptor{
    @Resource
    private EncryptDecryptConfig encryptDecryptConfig;
    @Override
    public String encrypt(String message) {
        if (StringUtils.isNotBlank(message)){
            try {
                message = encryptDecryptConfig.encrypt(message);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return message;
    }

    @Override
    public String decrypt(String encryptedMessage) {
        if (StringUtils.isNotBlank(encryptedMessage)){
            try {
                encryptedMessage = encryptDecryptConfig.decrypt(encryptedMessage);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return encryptedMessage;
    }
}

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Nacos配置中心提供了配置文件加密功能,可以对配置文件中的敏感信息进行加密处理。这样可以保护敏感信息,如数据库连接方式或第三方存储系统的相关信息。在Nacos的2.1版本中,新增了配置文件加密功能,无需自己实现,可以轻松实现配置内容的AES加密。\[1\] 要使用Nacos配置中心的加密功能,可以在启动配置类bootstrap.yml中添加相关信息。可以通过自定义加解密类来实现加解密操作,也可以使用jasypt默认的StringEncryptor进行加解密。在配置文件中添加jasypt的相关配置,包括加解密类的bean和盐值。\[2\] 配置文件会存储在Nacos的config_info表中,配置内容存储在content字段中。如果配置加密,content字段中存储的是密文,但在Nacos客户端展示配置时会以明文形式显示。这样可以保证配置的安全性,同时方便查看配置内容。\[3\] #### 引用[.reference_title] - *1* *3* [【Nacos配置中心】对配置文件内容进行加密](https://blog.csdn.net/weixin_43888891/article/details/126783468)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [nacos配置文件中敏感信息加密](https://blog.csdn.net/goldenminers/article/details/120488006)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值