当前位置: 首页 > news >正文

使用jasypt加密配置文件信息

我们的配置文件中,其实包含着大量与安全相关的敏感信息,例如数据库的账号密码、一些服务的密钥等。而这些信息一旦泄露,对于企业的重要数据资产是相当危险的。 所以对于这些配置文件中存在的敏感信息进行加密,是每个成熟开发团队都一定会去的事。

下面通过使用Jasypt来加密配置信息:https://github.com/ulisesbocchio/jasypt-spring-boot

Jasypt是一个Java库,可以方便地对Spring Boot应用中的敏感配置信息进行加密。

一.Springboot项目的配置信息加密: 

1. 添加依赖

首先在项目的pom.xml中添加Jasypt依赖:

<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.5</version> <!-- 使用最新版本 -->
</dependency>

然后再插件中加入:

<plugin><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-maven-plugin</artifactId><version>3.0.3</version>
</plugin>

2. 生成加密值

使用Jasypt工具类生成加密后的值:

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;public class JasyptEncryptor {public static void main(String[] args) {StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();encryptor.setPassword("mySecretKey123!"); // 设置加密密钥encryptor.setAlgorithm("PBEWithMD5AndDES");// 加密用户名String encryptedUsername = encryptor.encrypt("admin");System.out.println("Encrypted username: ENC(" + encryptedUsername + ")");// 加密密码String encryptedPassword = encryptor.encrypt("secret123");System.out.println("Encrypted password: ENC(" + encryptedPassword + ")");}
}

假设输出:

Encrypted username: ENC(4B5A6C8D9E0F1G2H3I4J5K6L7M8N9O0P)
Encrypted password: ENC(1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P)

3. 配置加密值

将加密后的值放入application.properties 。

application.propertiesapplication.yml中,使用ENC()包裹加密后的值:

# 未加密的普通配置
app.name=MyApp# 加密的数据库配置
db.url=jdbc:mysql://localhost:3306/mydb
db.username=ENC(4B5A6C8D9E0F1G2H3I4J5K6L7M8N9O0P)
db.password=ENC(1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P)

Spring会自动解密这些值,可以像使用普通配置一样使用它们:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Component
public class DatabaseConfig {@Value("${db.url}")private String url;@Value("${db.username}")private String username;@Value("${db.password}")private String password;public void printConfig() {System.out.println("Database URL: " + url);System.out.println("Database Username: " + username); // 自动解密System.out.println("Database Password: " + password); // 自动解密}
}

4. 配置加密密钥

有几种方式配置加密密钥:

方式1:直接写在配置文件中

jasypt.encryptor.password=your-secret-key

方式2:通过环境变量

jasypt.encryptor.password=${JASYPT_ENCRYPTOR_PASSWORD:}

然后在启动时传入环境变量:

export JASYPT_ENCRYPTOR_PASSWORD=your-secret-key
java -jar your-app.jar

方式3:通过命令行参数(推荐)

java -jar your-app.jar --jasypt.encryptor.password=your-secret-key

二.SpringCloud项目分布式配置中心的加密解密:

Spring Cloud Config提供了对属性进行加密解密的功能,以保护配置文件中的信息安全。

{cipher} 前缀是Spring Cloud Config Server的加密标识,后面跟随的是 ​AES加密后的十六进制字符串(64位字符)

比如下面的例子:

spring.datasource.username=eleven
spring.datasource.password={cipher}dba6505baa81d78bd08799d8d4429de499bd4c2053c05f029e7cfbf143695f5b

但是我们需要进行以下操作:

配置加密密钥:
# application.properties
encrypt.key=my-secret-key-123  # 必须与加密时使用的密钥一致
server.port=8888
测试解密:
curl -X POST http://localhost:8888/decrypt \-d "dba6505baa81d78bd08799d8d4429de499bd4c2053c05f029e7cfbf143695f5b"

下面我们演示如何加密密码:

创建Config Server:
<!-- pom.xml 添加依赖 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId>
</dependency>
启动Config Server:
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);}
}
 启动Config Server后加密新密码:
curl -X POST http://localhost:8888/encrypt -d "你的新密码"
# 返回类似:dba6505baa81d78bd08799d8d4429de499bd4c2053c05f029e7cfbf143695f5b
将加密结果存入配置
spring.datasource.password={cipher}新生成的加密字符串
通过环境变量传入密钥:
# 启动Config Server时
export ENCRYPT_KEY=my-secret-key-123
java -jar config-server.jar
或在启动命令中指定:
java -jar config-server.jar \--encrypt.key=my-secret-key-123

相关文章:

  • 如何解决 Linux 文件系统挂载失败的问题
  • 人物5_My roommate
  • torch.nn.Parameter 与 torch.Tensor
  • 浅谈链表的优化技巧
  • 如何修复卡在恢复模式下的 iPhone:简短指南
  • Linux(用户管用户与用户组管理理)
  • 在 Windows 环境下测试 8100 端口是否开放和正在监听
  • 【Java面试笔记:进阶】26.如何监控和诊断JVM堆内和堆外内存使用?
  • Redis 学习笔记 | 常用命令
  • 香港科技大学广州|生命科学与生物医学工程学域博士项目招生宣讲会—南京大学专场!!!(暨全额奖学金政策)
  • 测试—概念篇
  • BT131-ASEMI无人机专用功率器件BT131
  • 如何快速在idea中希望Spark程序
  • JAVA基础:Collections 工具类实战指南-从排序到线程安全
  • Vtable
  • 如何用postman进行批量操作
  • 根据用户出生日期计算年龄
  • 从暴力到优化:解决「分数严格小于k的子数组数目」问题
  • 代码随想录算法训练营第六十一天 | floyd算法
  • JAVA JVM面试题(二)
  • 总书记考察的上海“模速空间”,是一个怎样的空间?
  • 商务部新闻发言人就波音公司飞回拟交付飞机答记者问
  • 中国体育报关注徐梦桃、王曼昱、盛李豪等获评全国先进工作者:为建设体育强国再立新功
  • 中共中央、国务院关于表彰全国劳动模范和先进工作者的决定
  • 五一期间上海景观照明开启重大活动模式,外滩不展演光影秀
  • “天链”继续上新!长三乙火箭成功发射天链二号05星