写点什么

如何给 application.yml 文件的敏感信息加密?

作者:java易二三
  • 2023-08-24
    湖南
  • 本文字数:1730 字

    阅读完需:约 6 分钟

在我们传统的基于 SpringBoot 开发的项目中,在配置文件里,或多或少的都会有一些敏感信息,这样就会丢失一定的安全性,所以我们就需要,对敏感信息进行加密。我们可以使用 jasypt 工具进行加密。好了废话不多少,直接进入正题:


  1. 导入依赖 xml 复制代码<dependency>

  2. <groupId>com.github.ulisesbocchio</groupId>

  3. <artifactId>jasypt-spring-boot-starter</artifactId>

  4. <version>3.0.5</version>

  5. </dependency>


我的 Demo 里使用的是 SpringBoot3.0 之后的版本,所以大家如果像我一样都是基于 SpringBoot3.0 之后的,jasypt 一定要使用 3.0.5 以后的版本。2. 使用 jasypt 我们在配置文件里写几行配置 yaml 复制代码 jasypt:


encryptor:


password: sdjsdbshdbfuasd


property:


prefix: ENC(suffix: )


password 是加密密码,必须配置这一项,值可以随便输入。prefix 和 suffix 是默认配置,也可以自定义,默认值就是 ENC(和),这个是自动解密使用的。


2.1. 加/解密 jasypt 提供了一个工具类接口,StringEncryptor,这个接口提供了加解密方法。下面是他的源码。java 复制代码 public interface StringEncryptor {


/**  * 加密输入信息  *  * @param 要加密的信息  * @return 加密结果  */  public String encrypt(String message);  

/** * 解密加密信息 * * @param 加密信息(encryptedMessage) 要解密的加密信息 * @return 解密结果 */ public String decrypt(String encryptedMessage);
复制代码


}


我们在 test 测试类中,将要进行加密的文本使用 encrypt 方法进行加密 java 复制代码 @SpringBootTest


@Slf4j


class JasryptApplicationTests {


@Autowired  private StringEncryptor stringEncryptor;  
@Test void contextLoads() { String username = stringEncryptor.encrypt("root"); String password = stringEncryptor.encrypt("root"); log.info("username encrypt is {}", username); log.info("password encrypt is {}", password); log.info("username decrypt is {}", stringEncryptor.decrypt(username)); log.info("password decrypt is {}", stringEncryptor.decrypt(password)); }
复制代码


}


上边代码,加密的内容是,MySQL 的用户名和密码,同时对它们进行加密和解密,你当然可以对任意配置信息进行加解密操作。看看输出内容:log 复制代码 2023-07-23T18:59:50.621+08:00 INFO 9489 --- [ main] c.e.jasrypt.JasryptApplicationTests : username encrypt is 61zSoixtNayUruXt5x84kEKO9jGnZObTGCa1+k5Yg9F7qSUiZvp5fG31AMuVqrot2023-07-23T18:59:50.621+08:00 INFO 9489 --- [ main] c.e.jasrypt.JasryptApplicationTests : password encrypt is a6snCZCkbQFKkQqxN2bS18ags04yZxH+THwIL5RjGocEjG9sLkJvvasPFFVxEBWv2023-07-23T18:59:50.623+08:00 INFO 9489 --- [ main] c.e.jasrypt.JasryptApplicationTests : username decrypt is root2023-07-23T18:59:50.630+08:00 INFO 9489 --- [ main] c.e.jasrypt.JasryptApplicationTests : password decrypt is root


加密默认使用的是 PBEWITHHMACSHA512ANDAES_256 加密我们将密文,替换到数据源,配置:yaml 复制代码 spring:


datasource:


driver-class-name: com.mysql.cj.jdbc.Driver


url: jdbc:mysql://localhost:3306/honey?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8


username: ENC(61zSoixtNayUruXt5x84kEKO9jGnZObTGCa1+k5Yg9F7qSUiZvp5fG31AMuVqrot)


password: ENC(a6snCZCkbQFKkQqxN2bS18ags04yZxH+THwIL5RjGocEjG9sLkJvvasPFFVxEBWv)


⚠️注意别忘了加上前缀和后缀,如上边代码。这个时候就已经完成了,但是官方不建议我们将加密密码放到配置文件中,我们应作为系统属性、命令行参数或环境变量传递,只要其名称是 jasypt.encryptor.password,就能正常工作。我们可以将项目打为 jar 包然后使用 java -jar 命令 java 复制代码 java -jar jasrypt-0.0.1-SNAPSHOT.jar --jasypt.encryptor.password=加密密码


⚠️加密密码必须与之前给属性加密时用的加密密码一致。3. 结尾好了,分享到这里就结束了,希望小伙伴们多多点赞,如果有建议,欢迎留言。此致

用户头像

java易二三

关注

还未添加个人签名 2021-11-23 加入

还未添加个人简介

评论

发布
暂无评论
如何给application.yml文件的敏感信息加密?_Java_java易二三_InfoQ写作社区