使用jasypt 进行配置文件加密

项目中application.yml 配置文件的各种链接的username,password的值都是明文的,其实存在一定的安全隐患,这是可以使用jasypt 的方式进行明文加密,

需要注意的是 盐值和密文分开保存

下面实现最简单的配置
项目是springboot 框架
1.应用pom 文件

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency> 

2.yml 配置中添加 jasypt的盐值

盐值用来加解密的,但是配置再这里明显是不合适的,因为知道了盐值,也就可以加解密了,相当于没有使用jasypt,参考这篇文章: jasypt加密 的方式 把盐值和密文分开保存

jasypt:
  encryptor:
    password: 123456789

3.使用jasypt 类加密明文
直接使用test生成密文是其中一种方式,其它方式 参考 参考这篇文章: jasypt加密

@Test @Test public void test(){
        StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor(); //盐值 standardPBEStringEncryptor.setPassword("Saltvalue"); //加密明文 String code = standardPBEStringEncryptor.encrypt("加密密文"); //第二次test,解密第一次test的密文 System.out.println(standardPBEStringEncryptor.decrypt("uiqiG5IN/zZLExCSfnemxGZrIG9kStej"));
        System.out.println("code=" + code);
    }

4.将生成的code配置到yml

test:
  code: ENN(CBkS9ftxXVcLlg41W5+e+yHLPl8cSyzL)

5.使用加密后的值

@value("${test.code}") String code;
盐值和密文分开存储

之前是把盐值存储在配置文件实际上是否加密都成了问题了

盐值应该放在系统属性、命令行或是环境变量来使用

war包和jar包 两种方式是项目中实际用到的, 其它的参考

war包的项目

配置在tomcat 的配置文件 tomat/bin/Catalina.sh 的JAVA_OPTS值中 -Djasypt.encryptor.password=${salt}
启动tomcat 即可

jar包的项目

添加在start.sh 启动脚本中

java -jar xxx.jar --jasypt.encryptor.password=${salt} 

执行脚本即可



war 包项目部署到tomcat 配置jasypt

实际就是tomcat的启动参数配置
到Tomcat的bin目录下,打开文件catalina.sh 添加jasypt.encryptor.password=“${salt} ”

#Java开发#
全部评论

相关推荐

10-27 17:26
东北大学 Java
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务