Jasypt如何加密配置中的敏感信息

发布于:2023-01-29 ⋅ 阅读:(622) ⋅ 点赞:(0)

使用场景

我们的一些项目的配置文件中难免会有一些敏感的配置信息,虽然现在都用alibaba的nacos,但是如果我们有些项目不是分布式的话,我们就需要处理一下。接下来我们就来看看,如何使用jasypt对敏感信息加密。

搭建SpringBoot项目

我们直接从start.spring.io直接构建就好了,我们就不在进行阐述了,我们打开项目,然后加入以下依赖,如下:

	<dependencies>
		<dependency>
			<groupId>com.github.ulisesbocchio</groupId>
			<artifactId>jasypt-spring-boot-starter</artifactId>
			<version>3.0.3</version>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>com.github.ulisesbocchio</groupId>
				<artifactId>jasypt-maven-plugin</artifactId>
				<version>3.0.3</version>
			</plugin>
		</plugins>
	</build>

编写配置

# 加密、解密用的密码
jasypt.encryptor.password=didispace
# 个性化配置
person.name=lisi
person.password=administrator

配置类:

@Component
@Slf4j
@Data
public class SystemConfig {

    @Value("${person.name}")
    private String name;
    @Value("${person.password}")
    private String password;

    public String toString(){
        log.info("name:{},password:{}",name,password);
        return name+","+password;
    }
}

启动入口:

@SpringBootApplication
public class JasyptApplication implements ApplicationRunner {

	@Autowired
	private SystemConfig config;

	public static void main(String[] args) {
		SpringApplication.run(JasyptApplication.class, args);
	}

	@Override
	public void run(ApplicationArguments args) throws Exception {
		System.out.println(config.toString());
	}
}

使用命令对其加密

对要加密的属性,使用DEC()修饰,如下:

person.password=DEC(administrator)

然后我们使用以下命令,(注意这里的密码就是jasypt.encryptor.password)如下:

mvn jasypt:encrypt -Djasypr.encryptor.password=didispace

在这里插入图片描述
此时的属性配置就变成了ENC(),某些属性配置被加密了,这样算是保护项目的手段之一。那我们公司内部人员开发的时候,需要查看明文是什么,执行以下命令,解密配置文件中的属性值只会在控制台里面输出,配置文件中依旧是秘文。如下:

mvn jasypt:decrypt -Djasypt.encryptor.password=didispace

在这里插入图片描述

如何处理配置文件中的加密密码呢?

这里我们还疏忽了一点,就是我们的加密密码还在配置文件中,我们可以这样做,步骤如下:

  1. 首先,将密码配置去掉,内容如下:
person.name=lisi
person.password=DEC(administrator)
  1. 使用命令将配置加密,命令如下:
mvn jasypt:encrypt -Djasypr.encryptor.password=didispace

配置加密后,内容如下:

person.name=lisi
person.password=ENC(6CtwtxVn8mNu9qwFdxUfsiruwN9JnNW7s8fGLEPCDXqmQco93/RWeuYf9La0UEnk)
  1. 因为配置文件中没有配置jasypt的密码,那么我们用maven命令是无法打包的,我们可以使用以下命令将项目打成jar包,命令如下:
mvn jasypt:encrypt -Djasypt.encryptor.password=didispace  install
  1. 此时我们直接使用命令是无法运行jar包的,因为现在密码是加密的,我们的sysconfig配置类无法完成属性注入,如下:
    在这里插入图片描述
  2. 我们通过命令行传入参数的方式启动jar包,命令如下:
 java -jar jasypt-0.0.1-SNAPSHOT.jar --jasypt.encryptor.password=didispace
  1. 我们打开jar包看下配置文件的内容是不是加密的,如下

    这样我们就做到了没有配置密码情况下对项目、jar包的保护!!!

网站公告

今日签到

点亮在社区的每一天
去签到