SpringBoot项目中druid德鲁伊数据库密码加解密功能使用
·
1.前置准备
项目中引入druid的相关依赖,使用工具类调用druid的jar包方法生成公钥私钥;通过私钥进行加密,公钥进行解密,先使用工具类生成一组私钥公钥,供后续加解密使用
/**
* Druid加密工具类
*/
import com.alibaba.druid.filter.config.ConfigTools;
public class DruidPasswordEncryptor {
public static void main(String[] args) {
try {
// 要加密的数据库密码
String plainPassword = "root";
// 使用Druid工具加密密码
String[] keyPair = ConfigTools.genKeyPair(512);
//私钥
String privateKey = keyPair[0];
//公钥
String publicKey = keyPair[1];
String encryptedPassword = ConfigTools.encrypt(privateKey, plainPassword);
// 输出结果
System.out.println("Private Key: " + privateKey);
System.out.println("Public Key: " + publicKey);
System.out.println("Encrypted Password: " + encryptedPassword);
// 使用公钥进行解密验证加密是否正确
String decryptedPassword = ConfigTools.decrypt(publicKey, encryptedPassword);
System.out.println("Decrypted Password: " + decryptedPassword);
System.out.println("Encryption verified: " + plainPassword.equals(decryptedPassword));
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.配置修改
修改配置文件,启用 ConfigFilter 加解密
spring:
datasource:
url: jdbc:mysql://localhost:3306/jss_db?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai
username: root
password: YOUR_ENCRYPTED_PASSWORD_HERE # 使用工具类加密后的密码
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
druid:
# 连接池配置
initial-size: 5
min-idle: 5
max-active: 20
max-wait: 60000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1
test-while-idle: true
test-on-borrow: false
test-on-return: false
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
# 启用 ConfigFilter 加解密
#config.decrypt=true:开启解密,config.decrypt.key=你的公钥
filters: config # 必须包含 config
connection-properties: config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJ...
# Stat、Wall 等其他过滤器(可选)
# filters: stat,wall,config
3.问题处理
如果启动报错:
Public Key Retrieval is not allowed
在数据库连接加上allowPublicKeyRetrieval=true,例如:
url: jdbc:mysql://127.0.0.1:3306/jssdb?useOldAliasMetadataBehavior=true&useSSL=false&serverTimezone=GMT&allowPublicKeyRetrieval=true
4.加密脚本
目录结构如图:

DruidPasswordEncryptor.java源码如下:
import com.alibaba.druid.filter.config.ConfigTools;
import java.util.Scanner;
public class DruidPasswordEncryptor {
public static void main(String[] args) {
try {
// 检查是否提供了私钥参数
if (args.length < 1) {
System.err.println("错误: 请提供私钥作为命令行参数");
System.err.println("用法: java -cp \".;druid-1.2.9.jar\" DruidPasswordEncryptor <私钥>");
System.exit(1);
}
String privateKey = args[0];
while (true){
System.out.println("输入密码");
Scanner scanner = new Scanner(System.in);
String plainPassword = scanner.next();
String encryptedPassword = ConfigTools.encrypt(privateKey, plainPassword);
System.out.println("加密后的密码:");
System.out.println(encryptedPassword);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
windows下 执行脚本生成.class文件:
javac -encoding UTF-8 -cp .;druid-1.2.9.jar DruidPasswordEncryptor.java
windows环境脚本内容如下,最后一个""内的是之前保存的私钥:
java -cp ".;druid-1.2.9.jar" DruidPasswordEncryptor "MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAgUA+/Cmtp7x249IQqFwe9iLFnOukbDfHWJEcyro+1Cc83kg3eYL1fyxkoGGfCijNqMxxzCuRIRs9pC5g+AQUfwIDAQABAkBL5sSWJIucEyrmQrgRhneQJ39Q1XirLF5efmkgDBtVThYqmDw+9dbbzEJr03uvg6Inqf+pi8AGfSAU6l0wsUXxAiEAzpT8X8JRWSBL9sJtPySMjHEDm5tFNyGYJ9KKfiCz6eMCIQCgK4iYJLHU34cblYR37gXSDubXNIJMaeEmmCp6MDsdtQIhAJOuWHkQjl0bxJKETdsdAskHpd+g8atG/eJCFjWypUunAiADd83WVX0QOeLIAx3CJwIzQSVYZYeoteYtGsBYsvCkvQIhAIPY48I8N7iSIi3IkZqnhvdSyfKu2M3cQ06d+mjUxhMa"
linux脚本,公钥中不要有换行和空格:
java -cp ".:druid-1.2.9.jar" DruidPasswordEncryptor "MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAgUA+/Cmtp7x249IQqFwe9iLFnOukbDfHWJEcyro+1Cc83kg3eYL1fyxkoGGfCijNqMxxzCuRIRs9pC5g+AQUfwIDAQABAkBL5sSWJIucEyrmQrgRhneQJ39Q1XirLF5efmkgDBtVThYqmDw+9dbbzEJr03uvg6Inqf+pi8AGfSAU6l0wsUXxAiEAzpT8X8JRWSBL9sJtPySMjHEDm5tFNyGYJ9KKfiCz6eMCIQCgK4iYJLHU34cblYR37gXSDubXNIJMaeEmmCp6MDsdtQIhAJOuWHkQjl0bxJKETdsdAskHpd+g8atG/eJCFjWypUunAiADd83WVX0QOeLIAx3CJwIzQSVYZYeoteYtGsBYsvCkvQIhAIPY48I8N7iSIi3IkZqnhvdSyfKu2M3cQ06d+mjUxhMa"
效果图:

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)