Springboot项目使用jasypt加密配置文件中的密码

文章目录

  • 前言
  • 一、引入依赖
  • 二、yml文件配合jasypt加密秘钥
  • 三、代码获取加密后的密文
  • 四、密文密码替换yml配置文件中的明文
  • 五、启动项目
  • 六、命令行实现jasypt加解密
  • 总结


前言

web项目中application.yml 配置文件中,譬如:数据库、redis、加密算法的私钥等各种配置的username,password的值都是明文的,其实存在一定的安全隐患,如果被人拿到这些配置文件,将直接对系统安全构成极大威胁,为了加密敏感配置,我们可以使用jasypt 的方式进行明文加密。


一、引入依赖

<!--jasypt配置加密-->
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>2.1.2</version>
</dependency>

二、yml文件配合jasypt加密秘钥

#jasypt加密秘钥
jasypt:
  encryptor:
    password: abcdef

三、代码获取加密后的密文

注入StringEncryptor类,调用encrypt()方法;或者直接调用BasicTextEncryptor 类的encrypt()方法。

@Autowired
private StringEncryptor stringEncryptor;

@ApiOperation("配置加密")
@PostMapping("/encrypt")
public String encry(String str){
    String encData = stringEncryptor.encrypt(str);
    String decData = stringEncryptor.decrypt(encData);
    System.out.println("加密数据:"+encData);
    System.out.println("解密数据: " +decData);
    return encData;
}

public static void main(String[] args) {
    //创建加密对象,默认PBEWhisMD5AndDES
    BasicTextEncryptor encryptor = new BasicTextEncryptor();
    //加密秘钥
    encryptor.setPassword("abcdef");
    //将明文进行加密
    String encData = encryptor.encrypt("123456");
    //密文解密
    String decData = encryptor.decrypt(encData);
    System.out.println("加密后:"+encData);
    System.out.println("解密后: "+decData);
}

运行代码获得加密后的密文信息:
Springboot项目使用jasypt加密配置文件中的密码_第1张图片

通过查看启动日志,以及BasicTextEncryptor 类的源码可以发现,这两种实现加密的方法的默认加密算法是一致的,都是PBEWhisMD5AndDES 。
Springboot项目使用jasypt加密配置文件中的密码_第2张图片
Springboot项目使用jasypt加密配置文件中的密码_第3张图片

四、密文密码替换yml配置文件中的明文

#服务器端口和上下文
serverPort: 8087
contextPath: /sasac-dev

datasource:
  master:
    username: root
    password: ENC(4eG2g/DFApCL+/lZFGGxhw==)
    url: jdbc:mysql://127.0.0.1:3306/my_test_data?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&zeroDateTimeBehavior=convertToNull
  bus:
    username: root
    password: ENC(4eG2g/DFApCL+/lZFGGxhw==)
    url: jdbc:mysql://127.0.0.1:3306/sasac_data_screen?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&zeroDateTimeBehavior=convertToNull
#jasypt加密秘钥
jasypt:
  encryptor:
    password: abcdef

五、启动项目

1.idea工具本地启动
需要将jasypt的加密秘钥配置在yml文件中,否则启动会报错。
Springboot项目使用jasypt加密配置文件中的密码_第4张图片
2.jar包服务器启动
可在命令行中添加jasypt的加密秘钥,同时需要出掉yml文件中的秘钥配置信息,这样才能起到信息安全防护效果。
jar包启动命令:
java -jar -Djasypt.encryptor.password=abcdef -Dfile.encoding=utf-8 sasac-databoard-0.0.1-SNAPSHOT.jar
Springboot项目使用jasypt加密配置文件中的密码_第5张图片
若出现windows黑窗口应用日志输出乱码,可尝试以下方法解决:
Windows下cmd命令窗口启动jar包出现汉字信息中文乱码,尝试在黑窗口输入命令:
chcp 65001


六、命令行实现jasypt加解密

1.代码引入jasypt依赖包

<!--jasypt配置加密-->
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>2.1.2</version>
</dependency>

2.windows下点击左下角搜索输入cmd,打开命令行窗口;

3.进入jasypt的jar包所属目录:
cd d:
cd D:\Maven3.6\local_repository6.0\org\jasypt\jasypt\1.9.2

4.命令行加密明文
命令:
java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=“123456” password=abcdef algorithm=PBEWithMD5AndDES

output输出的字符串即为加密后的密钥:
Springboot项目使用jasypt加密配置文件中的密码_第6张图片
5.命令行解密密文
命令:
java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input=“7HDGyQ0hpEhtm9SDMKtVuQ==” password=abcdef algorithm=PBEWithMD5AndDES

output输出的字符串即为解密后的明文:
Springboot项目使用jasypt加密配置文件中的密码_第7张图片
参数说明:

algorithm:加密算法
input:要解密的内容
password:盐值
OUTPUT:解密后的内容
org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI 为解密使用的类

总结

注意:
1.jasypt配置的盐值(加密秘钥)和密文要记得分开保存;
2.生产环境为了安全,一般不在yml配置文件中配置jasypt的加密密钥,而是选择在启动服务时加上解密的密钥;

你可能感兴趣的:(SpringBoot,jasypt,spring,boot,java,后端)