数据库连接配置还在用明文密码?来了解一下纯Java编写的加解密工具包,附GitHub源码
你的项目数据库连接配置,是不是还在用明文密码或者SHELL脚本直接写死数据库连接密码?不妨试试来了解了解下这个工具包,简单、使用、安全,关于工具包介绍和说明,可以看下GitHub上的README.md文档,本文主要介绍如何使用该基于Java编写的加解密工具包及一些应用场景
数据库连接配置还在用明文密码?来了解一下纯Java编写的加解密工具包,附GitHub源码
1.明文加密
将下载好的pwd-encrypt-decrypt工程导入idea或eclipse,按实际更新MainTest.java测试类中的IP、用户、密码数据库信息,并运行测试类。
MainTest.java测试类:
package com.justin;
/**
* 密码加解密测试类
*/
public class MainTest {
private final static String HOST="127.0.0.1"; //数据库IP
private final static String USER = "root"; //数据库用户
private final static String PASSWORD = "abc@123456"; //数据库密码
public static void main(String[] args) {
//初始化加密需要的参数
args = encryptInitParam(args);
//初始化解密需要的参数
//args = decryptInitParam(args);
//加解密的主入口
Main.main(args);
}
/**
* 初始化加密需要的参数
* @param args
* @return
*/
private static String[] encryptInitParam(String[] args) {
args = new String[3];
args[0] = HOST;
args[1] = USER;
args[2] = PASSWORD;
return args;
}
/**
* 初始化解密需要的参数
* @param args
* @return
*/
private static String[] decryptInitParam(String[] args) {
args = new String[2];
args[0] = HOST;
args[1] = USER;
return args;
}
}
生成的密码解密文件为encrypt.pass,默认生成在编译目录下
2.密文解密
测试解密,将encrypt.pass加密文件中的整行密文字符串,拷贝到DecryptTest.java类中进行测试。
DecryptTest.java测试类:
public class DecryptTest {
public static void main(String[] args) {
String dePass = "127.0.0.1:root:C33D583B7575AF82FFDCE895C9F5E8FA:E5DBAC8F8FFF3EA5DC670221DAF820B3:DC9AB9C2382A04F2A479891CF9B411C9";
IDecrypt decrypt = new Decrypt();
String password = null;
try {
password = decrypt.getDepass(dePass);
} catch (Exception e) {
throw new RuntimeException("数据库密文解密失败:" + e.getMessage());
}
System.out.print(password);
}
}
3.生成工具包
完成了明文加密、密文解密说明对源码的验证完成了,可以将工程pwd-encrypt-decrypt导出为一个jar包,可根据实际需要自行命名架包
4.导入工具包
将生成的工具包pwd.jar手动依赖到自己的项目中
5.配置jdbc.properties或yml
修改项目数据库配置文件jdbc.properties或application.yml(springboot工程)文件中的app-data-source.password = ***数据库密码为encrypt.pass加密文件中得到的密文
配置如下:
#数据库连接驱动
app-data-source.driverClassName=com.mysql.jdbc.Driver
#数据库连接url
app-data-source.url=jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=UTF-8
#数据库用户
app-data-source.username=root
#数据库用户密码(加密)
app-data-source.password=127.0.0.1:root:C33D583B7575AF82FFDCE895C9F5E8FA:E5DBAC8F8FFF3EA5DC670221DAF820B3:DC9AB9C2382A04F2A479891CF9B411C9
#连接池初始化大小
app-data-source.initialSize=10
#连接池最大数量
app-data-source.maxAc