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

  • Post author:
  • Post category:其他





前言

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);
}

运行代码获得加密后的密文信息:

通过查看启动日志,以及BasicTextEncryptor 类的源码可以发现,这两种实现加密的方法的默认加密算法是一致的,都是PBEWhisMD5AndDES 。

在这里插入图片描述

在这里插入图片描述



四、密文密码替换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文件中,否则启动会报错。

在这里插入图片描述

2.jar包服务器启动

可在命令行中添加jasypt的加密秘钥,同时需要出掉yml文件中的秘钥配置信息,这样才能起到信息安全防护效果。

jar包启动命令:

java -jar -Djasypt.encryptor.password=abcdef -Dfile.encoding=utf-8 sasac-databoard-0.0.1-SNAPSHOT.jar

在这里插入图片描述

若出现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输出的字符串即为加密后的密钥:

在这里插入图片描述

5.命令行解密密文

命令:

java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input=“7HDGyQ0hpEhtm9SDMKtVuQ==” password=abcdef algorithm=PBEWithMD5AndDES

output输出的字符串即为解密后的明文:

在这里插入图片描述

参数说明:

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



总结

注意:

1.jasypt配置的盐值(加密秘钥)和密文要记得分开保存;

2.生产环境为了安全,一般不在yml配置文件中配置jasypt的加密密钥,而是选择在启动服务时加上解密的密钥;



版权声明:本文为weixin_42925623原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。