admin管理员组

文章数量:1639832

要在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.apachemons.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;
    }
}

本文标签: 简单NacosJaspyt