简介
最近隔离在家,做项目中发现项目中的配置文件敏感信息都是明文存储的的,很不安全。例如:数据库的密码,redis的密码,oss存储的相关key等等。
然后自己也上网百度了下相关的资料。找到了一个开源的配置文件加密实现:jasypt。
jasypt
开源地址:asypt-spring-boot
jasypt的使用
引入依赖
gradle:
compile group: 'com.github.ulisesbocchio', name: 'jasypt-spring-boot-starter', version: '3.0.4'
maven:
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.4</version>
</dependency>
修改配置文件
# 配置文件加密密码(必输)
jasypt.encryptor.password=123
# 3.0以上版本,下面这两项必须设置
jasypt.encryptor.algorithm=PBEWithMD5AndDES
jasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator
加密字符并替换
编写测试类,生成加密字符
package com.unfbx.gradle_test;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.StandardPBEByteEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
/**
* 描述:
*
* @author
* @date 2022-04-06
*/
public class Test {
public static void main(String[] args) {
// jasypt.encryptor.password=123
String salt = "123";
//待加密文本
String password = "123456";
PooledPBEStringEncryptor stringEncryptor = new PooledPBEStringEncryptor();
stringEncryptor.setConfig(cryptOr(salt));
String encryptStr = stringEncryptor.encrypt(password);
System.out.println(encryptStr);
}
public static SimpleStringPBEConfig cryptOr(String password) {
//jasypt 默认的加密方式
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;
}
}
输出加密文本
cRYimzBiTWER5G03myGgTw==
替换
# pgsql
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/postgis_test
spring.datasource.username=postgres
# 替换的密文默认“ENC(”开头,“)” 结尾
# 可自定义,github文档有说明
spring.datasource.password=ENC(M97tssJr1p6k9gvW3AH00w==)
启动测试
简单写个数据库查询接口测试下,数据库密码加密后是否生效,直接返回解密后的密码。
@Value("${spring.datasource.password}")
private String dbPassword;
@GetMapping("/db_password")
public String dbVersion(){
return dbPassword;
}
后续还是要看一下源码,来了解下实现原理。