Navicat查看密码,忘记密码之解决方案【Java版】
Navicat忘記密碼怎么辦
在日常開發(fā)過程中,忘記了navicat保存的數(shù)據(jù)庫密碼,應(yīng)該如何找到并還原密碼呢?
文章目錄
- Navicat忘記密碼怎么辦
- 前言
- 一、Navicat密碼查看工具是什么?
- 二、使用步驟
- 1.尋找(導(dǎo)出)密碼
- 2.填入(導(dǎo)入)數(shù)據(jù)
- 三、在線運行
- 四、總結(jié)
前言
??在使用Navicat過程中,我們忘記了保存的數(shù)據(jù)庫密碼,來該如何找回來呢?本文就介紹了如何找到密碼的說明。
一、Navicat密碼查看工具是什么?
??Navicat密碼查看工具是一個還原Navicat密碼的工具,根據(jù)Navicat導(dǎo)出連接的文件或加密密碼,還原出真實密碼的工具。
二、使用步驟
1.尋找(導(dǎo)出)密碼
navicat(11.2.7、12.1.15、15.1.17、16.0.3上述版本均已通過測試)
1.1.注冊表
計算機(jī)\HKEY_CURRENT_USER\SOFTWARE\PremiumSoft\Navicat\Servers\
??以navicat15為例,通過上方路徑,找到注冊表中存儲密碼值的位置(如下圖),選中要查看密碼的連接名稱,雙擊Pwd項,復(fù)制對應(yīng)的值,至此獲得了密文
1.2.navicat導(dǎo)出(推薦)
??以navicat15為例,菜單欄上點擊文件,選擇導(dǎo)出連接...,一定要選中導(dǎo)出密碼!!!導(dǎo)出格式為*.ncx(該ncx本質(zhì)上是xml文件,文件中包含連接的全部信息)
2.填入(導(dǎo)入)數(shù)據(jù)
??首先,請選擇對應(yīng)的Navicat版本(另:12及以上選擇Navicat12+)
??將找到的密碼(或?qū)С龅膎cx文件),填入(或?qū)?#xff09;到此工具中,如下圖所示:
??點擊【查看密碼】后,如圖:
??點擊【選擇文件】后,選擇ncx文件 (注:Navicat11版本沒有勾選導(dǎo)出密碼選項,直接導(dǎo)出即可;Navicat12+版本要勾選【導(dǎo)出密碼】選項!)\color{red} (注:Navicat11版本沒有勾選導(dǎo)出密碼選項,直接導(dǎo)出即可;Navicat12+版本要勾選【導(dǎo)出密碼】選項!)(注:Navicat11版本沒有勾選導(dǎo)出密碼選項,直接導(dǎo)出即可;Navicat12+版本要勾選【導(dǎo)出密碼】選項!) 選擇【打開】,信息展示如下圖:
三、在線運行
訪問
https://www.nhooo.com/tool/java8/復(fù)制粘貼一下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 "";}}} }四、總結(jié)
??本文僅僅簡單介紹了此工具的使用,此項目源代碼已開源,歡迎大家下載體驗,如果有幫到您,麻煩點下star,謝謝!
項目源碼:
github : https://github.com/Zhuoyuan1/navicat_password_decrypt
如果github打不開,碼云地址:https://gitee.com/lzy549876/navicat_password_decrypt
??另外網(wǎng)上大多數(shù)流傳的都是PHP語言版本的,而本人是一名JAVA開發(fā)者,故做出了這一工具,希望能幫助到大家!
??聲明:該工具源碼僅僅只作學(xué)術(shù)性研究,不可商業(yè)用途!
總結(jié)
以上是生活随笔為你收集整理的Navicat查看密码,忘记密码之解决方案【Java版】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【神经网络分类器】(一)你知道神经网络怎
- 下一篇: 大数据在5G应用场景下有哪些示范项目?