测试环境:Navicat Premium 版本15.0.25
理论版本12以上即可。
代码
import cn.hutool.core.io.file.FileReader;
import cn.hutool.crypto.symmetric.AES;
import org.dom4j.*;
import java.util.Iterator;
public class NavicatPassword {
public static void main(String[] args) throws DocumentException {
//整体参考:http://t.zoukankan.com/lori-p-15686959.html
//指定导出文件
FileReader fileReader = new FileReader("C:\\Users\\administrator\\Desktop\\connections.ncx");
String result = fileReader.readString();
System.out.println("==================获取文件内容==================");
System.out.println(result);
Document document = DocumentHelper.parseText(result);
Element root = document.getRootElement();
Element connection = root.elementIterator("Connection").next();
System.out.println("==================获取导出参数==================");
String connectionName = connection.attributeValue("ConnectionName");
String connType = connection.attributeValue("ConnType");
String host = connection.attributeValue("Host");
String port = connection.attributeValue("Port");
String userName = connection.attributeValue("UserName");
String encryPassword = connection.attributeValue("Password");
String database = connection.attributeValue("Database");
System.out.println("1.------->连接名称:" + connectionName);
System.out.println("2.------->数据库类型:" + connType);
System.out.println("3.------->主机(IP):" + host);
System.out.println("4.------->端口:" + port);
System.out.println("5.------->用户名:" + userName);
//解密
//参考https://the-x.cn/cryptography/Aes.aspx
AES aes = new AES("CBC", "PKCS7Padding", "libcckeylibcckey".getBytes(), "libcciv libcciv ".getBytes());
String val = aes.decryptStr(encryPassword);
System.out.println("6.------->密码:" + val);
System.out.println("7.------->数据库名称:" + database);
System.out.println("==============================================");
System.out.println();
System.out.println();
System.out.println();
System.out.println("================以下为全部连接信息================");
Iterator<Attribute> attributeIterator = connection.attributeIterator();
while (attributeIterator.hasNext()) {
Attribute attribute = attributeIterator.next();
System.out.println(attribute.getName() + ":" + attribute.getValue());
}
}
}
依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.3</version>
</dependency>
<!-- 由于IOS等移动端对AES加密有要求,必须为PKCS7Padding模式,但JDK本身并不提供这种模式,
因此
想要支持必须做一些工作。首先引入bc库: -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15to18</artifactId>
<version>1.68</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.dom4j/dom4j -->
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.3</version>
</dependency>
结果