数据库密码加密
对于我们的项目配置文件,特别是数据库密码,明文展示的话安全性不高,容易被搞坏事
这个时候我们就可以通过Druid数据库连接池来对密码进行一个加密
我们就可以在配置数据库密码的地方去使用加密后的密码去连接数据库了
别人没你的私钥,别人就算看到加密后的数据库密码
别人也是无法解密出来的
下面是具体的操作步骤:
1.首先引入Druid依赖
<!-- druid连接池,数据库工具 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.21</version>
</dependency>
下面可选的做一个就行
2.编写工具类(可选)
import com.alibaba.druid.filter.config.ConfigTools;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
/**
* 数据库加密Util
*/
public class DruidEncryptUtil {
private static String publicKey;
private static String privateKey;
static {
try {
String[] keyPair = ConfigTools.genKeyPair(512);
privateKey = keyPair[0];
System.out.println("privateKey:"+ privateKey);
publicKey = keyPair[1];
System.out.println("publicKey:"+ publicKey);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchProviderException e) {
e.printStackTrace();
}
}
//私钥加密
public static String encrypt(String plainText) throws Exception {
String encrypt = ConfigTools.encrypt(privateKey, plainText);
System.out.println("encrypt:"+encrypt);
return encrypt;
}
//公钥解密
public static String decrypt(String encryptText) throws Exception {
String decrypt = ConfigTools.decrypt(publicKey, encryptText);
System.out.println("decrypt:"+decrypt);
return decrypt;
}
public static void main(String[] args) throws Exception {
//在这填入你想加密的密码或内容,运行一下,控制台就能打印出来私钥,公钥,和加密后的密码
// 把公钥和加密后的密码配置到配置文件即可
String encrypt = encrypt("123456");
System.out.println("encrypt:"+encrypt);
}
}
我们运行这个main方法
就能够获取到加密后的私钥,公钥,和加密后的密码
2.直接运行jar包来完成加密(可选)
我们找到1步骤maven下载的jar包位置
cmd打开控制台
输入 java -cp druid-1.1.21.jar com.alibaba.druid.filter.config.ConfigTools 要加密的密码
这样控制台就会打印出来密码的私钥,公钥,和加密后的密码
3.写入配置文件
spring:
datasource:
url: jdbc:mysql://数据库ip:数据库端口/数据库?useSSL=false&rewriteBatchedStatements=true
username: root
password: ZW/mf9EZ...... #填加密过后的密码 ps:数据库密码明文加密
driver-class-name: com.mysql.jdbc.Driver
druid: #数据库连接池
initial-size: 20 # 初始化大小
min-idle: 20 # 最小空闲
connectionProperties: config.decrypt=true;config.decrypt.key=${publicKey};
max-active: 100 # 最大活跃
max-wait: 60000 # 最大等待
stat-view-servlet:
enabled: true # 开启监控
url-pattern: /druid/* # 监控路径
login-username: admin # 登录用户名
login-password: 123456 # 登录密码
filter:
stat:
enabled: true # 开启监控
slow-sql-millis: 2000 # 慢sql阈值,大于则记录慢sql,ms
log-slow-sql: true # 是否记录慢sql
wall:
enabled: true # 开启防御sql注入
config:
enabled: true #开启druid解密 ps:数据库密码明文加密,必须有这个配置才能解密
publicKey: MFww..... #公钥 ps:数据库密码明文加密,这个公钥也可配置在nacos上,只要能读到就行
直接配置在配置文件中,就能够做到这个加密的功能了
同样像ip,端口,数据库名字 也可以通过这种方式加密噢,你可以自己试一下