网站首页 > 博客文章 正文
项目组切换生产环境就将配置文件给替换了,里面的敏感信息都给加密了
1. 什么是 jasypt
Jasypt 是一个 Java 库,它允许开发人员以最少的努力为他/她的项目添加基本的加密功能,而无需深入了解密码学的工作原理
- 高安全性、基于标准的加密技术,适用于单向和双向加密。加密密码、文本、数字、二进制文件
- 适合集成到基于 Spring 的应用程序中
- 用于加密应用程序(即数据源)配置的集成功能
2. 使用
2.1 添加依赖
<!-- 场景启动器不用使用 @EnableEncryptableProperties 注解来开启功能 -->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
2.2 加密
// 自己写一个加密工具类
// 记下密钥、密文,使用完工具类则立马删除该工具类
public class jasyptUtil {
// 密钥
private static final String SECRET_KEY = "YOUR_SECRET_KEY";
// 加密
private static void encrypt() {
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setPassword(SECRET_KEY);
System.out.println("username: " + encryptor.encrypt("root"));
System.out.println("password: " + encryptor.encrypt("123456"));
}
// 解密
private static void decrypt() {
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setPassword(SECRET_KEY);
System.out.println("username: " + encryptor.decrypt("E+izLflKlT+IvffuKpbJlg=="));
System.out.println("password: " + encryptor.decrypt("YelRk+rlONRKAvgaoHKy+Q=="));
}
// 每次加密输出都不一样,因有随机数的参与,但是能解密出相同的数据
public static void main(String[] args) {
// E+izLflKlT+IvffuKpbJlg==
// YelRk+rlONRKAvgaoHKy+Q==
encrypt();
// root
// 123456
decrypt();
}
}
2.3 使用
# 将配置文件中的明文敏感数据用 ENC(密文) 替换
spring:
application:
name: jasypt-test
datasource:
username: ENC(E+izLflKlT+IvffuKpbJlg==)
password: ENC(YelRk+rlONRKAvgaoHKy+Q==)
2.4 项目启动
java -jar xxx.jar -Djasypt.encryptor.password=YOUR_SECRET_KEY
3. 原理
知道原理才懂得 jasypt 是怎么加密才不泄露的
3.1 PBE加密
我们使用 PBE 进行加密,其加密过程为:明文 + 密钥 + 随机盐值 => 密文,所以密文和密钥不能存放在一处
随机盐值在 jasypt 运行中可获取的,那么我们只要取得密钥就可以解密数据
所以密钥的存放十分重要,在上面项目启动过程中,只要启动项目的运维人员不泄露密钥,那么数据就是安全的
3.2 密钥处理
上面将密钥作为启动参数传入,还有一种密钥处理方式就是放入系统变量
3.2.1 添加系统变量
vim /etc/profile
export jasypt.encryptor.password=YOUR_SECRET_KEY
3.2.2 获取系统变量
@SpringBootApplication
public class JasyptApplication {
public static void main(String[] args) {
SpringApplication.run(JasyptApplication.class, args);
// 从系统变量中获取密钥,再放入环境变量
System.setProperty("jasypt.encryptor.password", System.getenv("jasypt.encryptor.password"));
}
}
来源:https://www.cnblogs.com/Howlet/p/15397910.html
猜你喜欢
- 2024-11-13 spring boot配置文件敏感字段加密
- 2024-11-13 Spring Boot数据库密码加密的配置方法
- 2024-11-13 Spring Boot安全之application配置信息加密
- 2024-11-13 如何在SpringBoot项目中实现加密?
- 2024-11-13 SpringBoot进阶-SpringBoot如何实现配置文件脱敏?
- 2024-11-13 加密SpringBoot配置文件技巧(加密pdf文件如何解密编辑)
- 2024-11-13 Spring Boot版本和Jasypt版本的兼容性问题?
- 2024-11-13 SpringBoot加密配置属性(springboot配置密码加密)
- 2024-11-13 SpringCloud-OAuth2(二):实战篇(oauth2.0 springcloud)
- 2024-11-13 SpringBoot 配置文件这样加密,才足够安全!
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)