Springboot项目使用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);
}

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

通过查看启动日志,以及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的加密密钥,而是选择在启动服务时加上解密的密钥;

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
JasyptJava Simplified Encryption)是一个Java加密库,它可以用来加密/解密文本、哈希密码等。Spring Boot提供了对Jasypt的支持,可以在应用程序轻松使用Jasypt加密敏感信息。下面是使用Jasypt对MySQL配置文件进行加密的步骤: 1. 引入Jasypt依赖 在pom.xml文件添加以下依赖: ```xml <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> ``` 2. 配置加密 在application.properties或者application.yml添加以下配置: ```properties jasypt.encryptor.password=your_password ``` 其,your_password是用来加密敏感信息的密码。 3. 加密MySQL配置信息 在application.properties或者application.yml加入MySQL配置信息,如下: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=root ``` 将密码部分使用Jasypt进行加密,如下: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=ENC(加密后的密码) ``` 其加密后的密码可以使用Jasypt提供的加密工具进行加密。例如,我们可以使用以下命令生成加密后的密码: ``` java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="root" password="your_password" algorithm=PBEWithMD5AndDES ``` 其jasypt-1.9.2.jar是Jasypt的jar包,your_password是用来加密敏感信息的密码。执行以上命令后,会输出加密后的密码。 4. 配置解密 在启动应用程序时,Spring Boot会自动解密加密的敏感信息。因此,我们不需要任何额外的配置来解密MySQL密码。只需将加密后的密码放入配置文件即可。 至此,我们已经成功地使用Jasypt对MySQL配置文件进行了加密

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值