1、为什么要对文件加密
在没有对配置问价加密的时候,我们所有的密码都是使用明文的方式写入的,如果项目被别人拿到,通过配置文件就可以获取我们的数据库,redis连接,还是比较危险的一件事。
# 数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
# 主库数据源
master:
url: jdbc:mysql://localhost:3306/databaseName?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: root
# 从库数据源
slave:
# 从数据源开关/默认关闭
enabled: false
url:
username:
password:
jasypt
-
asypt是一个Java库,它允许开发人员以最小的努力为他/她的项目添加基本的加密功能,而无需深入了解密码学的工作原理。
-
基于标准的高安全性加密技术,适用于单向和双向加密。加密密码,文本,数字,二进制文件...
-
与 Hibernate 的透明集成。
-
适合集成到基于 Spring 的应用程序中,也可以透明地与 Spring 安全性集成。
-
用于加密应用程序(即数据源)配置的集成功能。
-
多处理器/多核系统中高性能加密的特定功能。
-
开放 API 以与任何 JCE 提供程序一起使用。
……
spring项目集成
1⃣️ 引入maven依赖
springboot 项目引入下面的依赖包
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
2⃣️生成密码
public static void main(String[] args) {
StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
String pwd = "root";
EnvironmentPBEConfig config = new EnvironmentPBEConfig();
config.setAlgorithm("PBEWithMD5AndDES");
config.setPassword("shige");// 这里的‘shige’为私钥,不可以泄漏
standardPBEStringEncryptor.setConfig(config);
String encrypt = standardPBEStringEncryptor.encrypt(pwd);
System.out.println(encrypt);
}
3⃣️修改配置文件
将上面执行得到的秘闻写入配置文件中,加密的密码默认使用ENC()包裹。ENC()可以通过配置修改
# 数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
# 主库数据源
master:
url: ENC(CcuAd8BLTWTYXQ7e7A/9Sp13O4guEAIBVduewJwRS0XGkRiQoBgJpU8vwPh6Wm/yIQP9M/rBUBgoF/GQnwwnMEaMxWiUOwvBuKmokQohJ215KZM19UDscLg1ipiwAApsmxILz4YATNaxPOfnzYCdfLrwtobwe+zXNcJQJghnltL25JjxQ+JTfg024EOxjVQiCHXFY9dt64LI9dpsy9YbGuQweGU3zt08)
username: ENC(j8+bLs5bsOG5m1nDnX3pDQ==)
password: ENC(0Ctf4iJVTmk7X/6nWNLVPsMV9f6aY8sh)
4⃣️启动
项目启动需要指定上面的私钥