Navicat查看密码,忘记密码之解决方案【Java版】
Navicat忘记密码怎么办
在日常开发过程中,忘记了navicat保存的数据库密码,应该如何找到并还原密码呢?
文章目录
- Navicat忘记密码怎么办
- 前言
- 一、Navicat密码查看工具是什么?
- 二、使用步骤
- 1.寻找(导出)密码
- 2.填入(导入)数据
- 三、在线运行
- 四、总结
前言
在使用Navicat过程中,我们忘记了保存的数据库密码,来该如何找回来呢?本文就介绍了如何找到密码的说明。
一、Navicat密码查看工具是什么?
Navicat密码查看工具是一个还原Navicat密码的工具,根据Navicat导出连接的文件或加密密码,还原出真实密码的工具。
二、使用步骤
1.寻找(导出)密码
navicat(11.2.7、12.1.15、15.1.17、16.0.3上述版本均已通过测试)
1.1.注册表
计算机\HKEY_CURRENT_USER\SOFTWARE\PremiumSoft\Navicat\Servers\
以navicat15为例,通过上方路径,找到注册表中存储密码值的位置(如下图),选中要查看密码的连接名称,双击Pwd项,复制对应的值,至此获得了密文
1.2.navicat导出(推荐)
以navicat15为例,菜单栏上点击文件,选择导出连接...,一定要选中导出密码!!!导出格式为*.ncx(该ncx本质上是xml文件,文件中包含连接的全部信息)
2.填入(导入)数据
首先,请选择对应的Navicat版本(另:12及以上选择Navicat12+)
将找到的密码(或导出的ncx文件),填入(或导入)到此工具中,如下图所示:
点击【查看密码】后,如图:
点击【选择文件】后,选择ncx文件 (注:Navicat11版本没有勾选导出密码选项,直接导出即可;Navicat12+版本要勾选【导出密码】选项!)\color{red} (注:Navicat11版本没有勾选导出密码选项,直接导出即可;Navicat12+版本要勾选【导出密码】选项!)(注:Navicat11版本没有勾选导出密码选项,直接导出即可;Navicat12+版本要勾选【导出密码】选项!) 选择【打开】,信息展示如下图:
三、在线运行
访问
https://www.nhooo.com/tool/java8/复制粘贴一下java解密代码
import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import javax.xml.bind.DatatypeConverter; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.util.Arrays;public class Main {public static void main(String []args) {//navicat11解密Navicat11Cipher de = new Navicat11Cipher();System.out.println(de.decryptString("15057D7BA390"));//navicat12解密Navicat12Cipher de12 = new Navicat12Cipher();System.out.println(de12.decryptString("503AA930968F877F04770B47DD731DC0"));}static class Navicat11Cipher {public static final String DefaultUserKey = "3DC5CA39";private static byte[] _IV;private static SecretKeySpec _Key;private static Cipher _Encryptor;private static Cipher _Decryptor;private static void initKey(String UserKey) {try {MessageDigest sha1 = MessageDigest.getInstance("SHA1");byte[] userkey_data = UserKey.getBytes(StandardCharsets.UTF_8);sha1.update(userkey_data, 0, userkey_data.length);_Key = new SecretKeySpec(sha1.digest(), "Blowfish");} catch (Exception e) {e.printStackTrace();}}private static void initChiperEncrypt() {try {// Must use NoPadding_Encryptor = Cipher.getInstance("Blowfish/ECB/NoPadding");_Encryptor.init(Cipher.ENCRYPT_MODE, _Key);} catch (Exception e) {e.printStackTrace();}}private static void initChiperDecrypt() {try {// Must use NoPadding_Decryptor = Cipher.getInstance("Blowfish/ECB/NoPadding");_Decryptor.init(Cipher.DECRYPT_MODE, _Key);} catch (Exception e) {e.printStackTrace();}}private static void initIV() {try {byte[] initVec = DatatypeConverter.parseHexBinary("FFFFFFFFFFFFFFFF");_IV = _Encryptor.doFinal(initVec);} catch (Exception e) {e.printStackTrace();}}private void xorBytes(byte[] a, byte[] b) {for (int i = 0; i < a.length; i++) {int aVal = a[i] & 0xff; // convert byte to integerint bVal = b[i] & 0xff;a[i] = (byte) (aVal ^ bVal); // xor aVal and bVal and typecast to byte}}private void xorBytes(byte[] a, byte[] b, int l) {for (int i = 0; i < l; i++) {int aVal = a[i] & 0xff; // convert byte to integerint bVal = b[i] & 0xff;a[i] = (byte) (aVal ^ bVal); // xor aVal and bVal and typecast to byte}}static {initKey(DefaultUserKey);initChiperEncrypt();initChiperDecrypt();initIV();}private byte[] Encrypt(byte[] inData) {try {byte[] CV = Arrays.copyOf(_IV, _IV.length);byte[] ret = new byte[inData.length];int blocks_len = inData.length / 8;int left_len = inData.length % 8;for (int i = 0; i < blocks_len; i++) {byte[] temp = Arrays.copyOfRange(inData, i * 8, (i * 8) + 8);xorBytes(temp, CV);temp = _Encryptor.doFinal(temp);xorBytes(CV, temp);System.arraycopy(temp, 0, ret, i * 8, 8);}if (left_len != 0) {CV = _Encryptor.doFinal(CV);byte[] temp = Arrays.copyOfRange(inData, blocks_len * 8, (blocks_len * 8) + left_len);xorBytes(temp, CV, left_len);System.arraycopy(temp, 0, ret, blocks_len * 8, temp.length);}return ret;} catch (Exception e) {e.printStackTrace();return null;}}public String encryptString(String inputString) {try {byte[] inData = inputString.getBytes(StandardCharsets.UTF_8);byte[] outData = Encrypt(inData);return DatatypeConverter.printHexBinary(outData);} catch (Exception e) {e.printStackTrace();return "";}}private byte[] Decrypt(byte[] inData) {try {byte[] CV = Arrays.copyOf(_IV, _IV.length);byte[] ret = new byte[inData.length];int blocks_len = inData.length / 8;int left_len = inData.length % 8;for (int i = 0; i < blocks_len; i++) {byte[] temp = Arrays.copyOfRange(inData, i * 8, (i * 8) + 8);temp = _Decryptor.doFinal(temp);xorBytes(temp, CV);System.arraycopy(temp, 0, ret, i * 8, 8);for (int j = 0; j < CV.length; j++) {CV[j] = (byte) (CV[j] ^ inData[i * 8 + j]);}}if (left_len != 0) {CV = _Encryptor.doFinal(CV);byte[] temp = Arrays.copyOfRange(inData, blocks_len * 8, (blocks_len * 8) + left_len);xorBytes(temp, CV, left_len);for (int j = 0; j < temp.length; j++) {ret[blocks_len * 8 + j] = temp[j];}}return ret;} catch (Exception e) {e.printStackTrace();return null;}}public String decryptString(String hexString) {try {byte[] inData = DatatypeConverter.parseHexBinary(hexString);byte[] outData = Decrypt(inData);return new String(outData, StandardCharsets.UTF_8);} catch (Exception e) {e.printStackTrace();return "";}}}static class Navicat12Cipher {private static SecretKeySpec _AesKey;private static IvParameterSpec _AesIV;static {_AesKey = new SecretKeySpec("libcckeylibcckey".getBytes(StandardCharsets.UTF_8), "AES");_AesIV = new IvParameterSpec("libcciv libcciv ".getBytes(StandardCharsets.UTF_8));}public String encryptString(String plaintext) {try {Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, _AesKey, _AesIV);byte[] ret = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8));return DatatypeConverter.printHexBinary(ret);} catch (Exception e) {e.printStackTrace();return "";}}public String decryptString(String ciphertext) {try {Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");cipher.init(Cipher.DECRYPT_MODE, _AesKey, _AesIV);byte[] ret = cipher.doFinal(DatatypeConverter.parseHexBinary(ciphertext));return new String(ret, StandardCharsets.UTF_8);} catch (Exception e) {e.printStackTrace();return "";}}} }四、总结
本文仅仅简单介绍了此工具的使用,此项目源代码已开源,欢迎大家下载体验,如果有帮到您,麻烦点下star,谢谢!
项目源码:
github : https://github.com/Zhuoyuan1/navicat_password_decrypt
如果github打不开,码云地址:https://gitee.com/lzy549876/navicat_password_decrypt
另外网上大多数流传的都是PHP语言版本的,而本人是一名JAVA开发者,故做出了这一工具,希望能帮助到大家!
声明:该工具源码仅仅只作学术性研究,不可商业用途!
总结
以上是生活随笔为你收集整理的Navicat查看密码,忘记密码之解决方案【Java版】的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 【神经网络分类器】(一)你知道神经网络怎
- 下一篇: Java 大文件分片上传