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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: 本文介绍了如何在SpringBoot应用中使用jasypt进行配置信息的加密解密。首先,需要添加jasypt-spring-boot-starter的依赖,版本至少为3.0.5。接着,在配置文件中设置`jasypt.encryptor.password`等参数。jasypt提供`StringEncryptor`接口用于加密解密,通过该接口可以在测试类中对敏感信息(如数据库用户名和密码)进行加解密。加密后的信息需带有`ENC()`前后缀。推荐将加密密码作为系统属性、命令行参数或环境变量传递,而不是直接写入配置文件。

1. 导入依赖

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

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

yaml

复制代码

jasypt:  
  encryptor:  
    password: sdjsdbshdbfuasd  
    property:  
      prefix: ENC(
      suffix: )

password是加密密码,必须配置这一项,值可以随便输入。prefixsuffix是默认配置,也可以自定义,默认值就是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+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加密 我们将密文,替换到数据源,配置:

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=加密密码

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


转载来源:https://juejin.cn/post/7258850748149203000

相关文章
|
2天前
|
Ubuntu Linux 数据安全/隐私保护
使用Cython库包对python的py文件(源码)进行加密,把python的.py文件生成.so文件并调用
本文介绍了在Linux系统(Ubuntu 18.04)下将Python源代码(`.py文件`)加密为`.so文件`的方法。首先安装必要的工具如`python3-dev`、`gcc`和`Cython`。然后通过`setup.py`脚本使用Cython将`.py文件`转化为`.so文件`,从而实现源代码的加密保护。文中详细描述了从编写源代码到生成及调用`.so文件`的具体步骤。此方法相较于转化为`.pyc文件`提供了更高的安全性。
12 2
|
19天前
|
存储 SQL 安全
网络防线:揭秘网络安全漏洞与信息加密的奥秘
在数字时代,网络安全与信息保护如同一场没有硝烟的战争。本文将带您深入了解网络安全的薄弱环节,探索加密技术如何成为守护信息安全的利剑,并强调提升个人和组织安全意识的重要性。从常见漏洞到防护策略,再到加密技术的演变,我们将一步步揭开网络安全的神秘面纱,让您在这个充满未知的数字世界中更加从容不迫。
24 2
|
17天前
|
C# 图形学 数据安全/隐私保护
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件
|
2月前
|
存储 SQL 安全
现代网络安全与信息保护:漏洞、加密与安全意识
在数字化时代,网络安全和信息保护显得尤为重要。本文探讨了网络安全中的漏洞现象及其影响,分析了加密技术在信息保护中的关键作用,并提出了提升安全意识的方法和建议,以帮助读者更好地应对日益复杂的网络威胁。 【7月更文挑战第7天】
23 2
|
3月前
|
存储 安全 算法
网络安全与信息保护:解析漏洞、加密技术与安全意识
在当今数字化社会中,网络安全与信息保护显得尤为关键。本文深入探讨了网络安全漏洞的种类与影响,加密技术的演变与应用,以及个体与组织在提升安全意识方面的关键作用。通过系统的分析与实例,读者将对如何应对当今复杂的网络安全挑战有更清晰的理解与启发。
33 2
|
3月前
|
存储 安全 API
使用KMS为Apollo配置中心敏感配置加密的最佳实践
使用KMS为Apollo配置中心敏感配置加密的最佳实践
343 2
|
2月前
|
算法 安全 数据安全/隐私保护
支付系统---微信支付09------数字签名,现在Bob想要给Pink写一封信,信件的内容不需要加密,怎样能够保证信息的完整性,使用信息完整性的主要手段是摘要算法,散列函数,哈希函数,H称为数据指纹
支付系统---微信支付09------数字签名,现在Bob想要给Pink写一封信,信件的内容不需要加密,怎样能够保证信息的完整性,使用信息完整性的主要手段是摘要算法,散列函数,哈希函数,H称为数据指纹
|
4月前
|
SQL 安全 算法
数字堡垒的构筑者:网络安全与信息加密技术
【5月更文挑战第30天】 在数字化进程不断加速的今天,网络安全和信息安全已经成为了维护国家安全、企业利益和个人隐私的关键。本文将深入探讨网络安全漏洞的本质与危害,分析加密技术在防御体系中的核心作用,并提升公众的安全意识。通过对网络攻防技术的剖析,我们不仅能够认识到安全防线的重要性,还能学会如何在数字世界中筑起坚固的防护墙。
|
4月前
|
数据安全/隐私保护
如何自动(定时/间隔/重复)执行 同步文件、备份打包加密压缩文件
该文提供了一个工具的下载链接,分别在百度网盘和蓝奏云,提取码分别为&qwu2&quot;和&quot;2r1z&quot;。工具的使用需结合之前发布的两篇教程:《快捷自由定时重启、注销、关机》和《如何从多个文件夹内转移全部文件(忽略文件夹的结构)(进行复制)(再打包)》。操作步骤包括设定&quot;来源路径&quot;进行Zip打包,启用&quot;备份模式&quot;,然后保存批量复制任务,最后在定时器中执行已设置的批量文件复制任务。文中附有相关截图以供参考。
|
4月前
|
SQL 安全 网络安全
数字堡垒的构筑者:网络安全与信息加密的智慧
【5月更文挑战第22天】 在数字化浪潮不断推进的今天,网络安全与信息安全已经成为了维护个人隐私、企业商业秘密和国家安全的重要屏障。本文深入探讨网络安全漏洞的本质、加密技术的演进以及提升安全意识的重要性,旨在为读者提供一道防护数据泄露和网络攻击的坚固防线。通过对常见网络威胁的分析,我们将了解如何通过技术和教育双重手段来强化这道防线。
下一篇
云函数