前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何给application.yml文件的敏感信息加密?

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

作者头像
每周聚焦
发布2024-05-25 17:36:19
1590
发布2024-05-25 17:36:19

1. 导入依赖

代码语言:javascript
复制
xml复制代码<dependency>  
    <groupId>com.github.ulisesbocchio</groupId>  
    <artifactId>jasypt-spring-boot-starter</artifactId>  
    <version>3.0.5</version>  
</dependency>

我的Demo里使用的是SpringBoot3.0之后的版本,所以大家如果像我一样都是基于SpringBoot3.0之后的,jasypt一定要使用3.0.5以后的版本。

2. 使用jasypt

我们在配置文件里写几行配置

代码语言:javascript
复制
yaml复制代码jasypt:  
  encryptor:  
    password: sdjsdbshdbfuasd  
    property:  
      prefix: ENC(
      suffix: )

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

2.1. 加/解密

jasypt 提供了一个工具类接口,StringEncryptor,这个接口提供了加解密方法。下面是他的源码。

代码语言:javascript
复制
java复制代码public interface StringEncryptor {  
  
    /**  
    * 加密输入信息  
    *  
    * @param 要加密的信息  
    * @return 加密结果  
    */  
    public String encrypt(String message);  


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

我们在 test 测试类中,将要进行加密的文本使用encrypt方法进行加密

代码语言:javascript
复制
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的用户名密码,同时对它们进行加密和解密,你当然可以对任意配置信息进行加解密操作。看看输出内容:

代码语言:javascript
复制
log复制代码2023-07-23T18:59:50.621+08:00  INFO 9489 --- [           main] c.e.jasrypt.JasryptApplicationTests      : username encrypt is 61zSoixtNayUruXt5x84kEKO9jGnZObTGCa1+k5Yg9F7qSUiZvp5fG31AMuVqrot
2023-07-23T18:59:50.621+08:00  INFO 9489 --- [           main] c.e.jasrypt.JasryptApplicationTests      : password encrypt is a6snCZCkbQFKkQqxN2bS18ags04yZxH+THwIL5RjGocEjG9sLkJvvasPFFVxEBWv
2023-07-23T18:59:50.623+08:00  INFO 9489 --- [           main] c.e.jasrypt.JasryptApplicationTests      : username decrypt is root
2023-07-23T18:59:50.630+08:00  INFO 9489 --- [           main] c.e.jasrypt.JasryptApplicationTests      : password decrypt is root

加密默认使用的是PBEWITHHMACSHA512ANDAES_256加密 我们将密文,替换到数据源,配置:

代码语言:javascript
复制
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命令

代码语言:javascript
复制
java复制代码java -jar jasrypt-0.0.1-SNAPSHOT.jar --jasypt.encryptor.password=加密密码

⚠️加密密码必须与之前给属性加密时用的加密密码一致。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 导入依赖
  • 2. 使用jasypt
    • 2.1. 加/解密
    相关产品与服务
    云数据库 MySQL
    腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档