解決Navicat數(shù)據(jù)庫連接成功但密碼忘記的問題
解決方法
一:通過注冊表找到數(shù)據(jù)庫連接的密碼,再通過PHP解密
具體操作:
1.用 win + R 快捷鍵打開運行窗口,輸入 regedit 打開注冊表
2.在注冊表地址欄輸入下面內(nèi)容,查找Navicat密碼保存位置,回車:
計算機\HKEY_CURRENT_USER\SOFTWARE\PremiumSoft\Navicat\Servers
3.在servers目錄下,找到需要找回密碼的連接,鼠標左鍵點擊,右側(cè)下拉找到名稱為 pwd 的一項,該項的數(shù)據(jù)即為密碼。右鍵,點擊修改,復(fù)制數(shù)據(jù):
4.使用 https://tool.lu/coderunner/ 在線工具,對復(fù)制下來的密碼15057D7BA390進行解密
5.將以下php解密代碼復(fù)制到在線工具中,將復(fù)制的數(shù)據(jù)粘貼到代碼的倒數(shù)第二行,點擊執(zhí)行,即可得到密碼
PS:該工具首行不能空行,否則執(zhí)行會報錯;另外,在代碼倒數(shù)五六行需要指定Navicat版本
<?php namespace FatSmallTools; class NavicatPassword { protected $version = 0; protected $aesKey = 'libcckeylibcckey'; protected $aesIv = 'libcciv libcciv '; protected $blowString = '3DC5CA39'; protected $blowKey = null; protected $blowIv = null; public function __construct($version = 12) { $this->version = $version; $this->blowKey = sha1('3DC5CA39', true); $this->blowIv = hex2bin('d9c7c3c8870d64bd'); } public function encrypt($string) { $result = FALSE; switch ($this->version) { case 11: $result = $this->encryptEleven($string); break; case 12: $result = $this->encryptTwelve($string); break; default: break; } return $result; } protected function encryptEleven($string) { $round = intval(floor(strlen($string) / 8)); $leftLength = strlen($string) % 8; $result = ''; $currentVector = $this->blowIv; for ($i = 0; $i < $round; $i++) { $temp = $this->encryptBlock($this->xorBytes(substr($string, 8 * $i, 8), $currentVector)); $currentVector = $this->xorBytes($currentVector, $temp); $result .= $temp; } if ($leftLength) { $currentVector = $this->encryptBlock($currentVector); $result .= $this->xorBytes(substr($string, 8 * $i, $leftLength), $currentVector); } return strtoupper(bin2hex($result)); } protected function encryptBlock($block) { return openssl_encrypt($block, 'BF-ECB', $this->blowKey, OPENSSL_RAW_DATA|OPENSSL_NO_PADDING); } protected function decryptBlock($block) { return openssl_decrypt($block, 'BF-ECB', $this->blowKey, OPENSSL_RAW_DATA|OPENSSL_NO_PADDING); } protected function xorBytes($str1, $str2) { $result = ''; for ($i = 0; $i < strlen($str1); $i++) { $result .= chr(ord($str1[$i]) ^ ord($str2[$i])); } return $result; } protected function encryptTwelve($string) { $result = openssl_encrypt($string, 'AES-128-CBC', $this->aesKey, OPENSSL_RAW_DATA, $this->aesIv); return strtoupper(bin2hex($result)); } public function decrypt($string) { $result = FALSE; switch ($this->version) { case 11: $result = $this->decryptEleven($string); break; case 12: $result = $this->decryptTwelve($string); break; default: break; } return $result; } protected function decryptEleven($upperString) { $string = hex2bin(strtolower($upperString)); $round = intval(floor(strlen($string) / 8)); $leftLength = strlen($string) % 8; $result = ''; $currentVector = $this->blowIv; for ($i = 0; $i < $round; $i++) { $encryptedBlock = substr($string, 8 * $i, 8); $temp = $this->xorBytes($this->decryptBlock($encryptedBlock), $currentVector); $currentVector = $this->xorBytes($currentVector, $encryptedBlock); $result .= $temp; } if ($leftLength) { $currentVector = $this->encryptBlock($currentVector); $result .= $this->xorBytes(substr($string, 8 * $i, $leftLength), $currentVector); } return $result; } protected function decryptTwelve($upperString) { $string = hex2bin(strtolower($upperString)); return openssl_decrypt($string, 'AES-128-CBC', $this->aesKey, OPENSSL_RAW_DATA, $this->aesIv); } } use FatSmallTools\NavicatPassword; //需要指定版本,11或12 //$navicatPassword = new NavicatPassword(12); $navicatPassword = new NavicatPassword(11); //解密 $decode = $navicatPassword->decrypt('15057D7BA390'); echo $decode."\n";
二:通過Navicat導(dǎo)出連接,找到連接密碼,再通過PHP進行解密
具體操作:
1.打開Navicat,導(dǎo)航欄點擊“文件”,點擊“導(dǎo)出連接”,
2.選擇自己需要找回密碼的連接,并勾選左下角“導(dǎo)出密碼”,點擊“確定”
3.打開導(dǎo)出的文件,找到Password這一項,將引號中的數(shù)據(jù)復(fù)制下來
4.打開并使用方法一步驟4.中的在線工具和代碼,修改倒數(shù)第二行的內(nèi)容為步驟三保存的數(shù)據(jù)833E4ABBC56C89041A9070F043641E3B,點擊運行
PS:由于我使用的是Navicat 12,在這種方法中需要修改代碼中倒數(shù)第五六行的版本,否則解析出來亂碼
以上就是解決Navicat數(shù)據(jù)庫連接成功但密碼忘記的問題的詳細內(nèi)容,更多關(guān)于Navicat數(shù)據(jù)庫密碼忘記的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解數(shù)據(jù)庫中跨庫數(shù)據(jù)表的運算
跨庫數(shù)據(jù)表,是指邏輯上同一張數(shù)據(jù)表被分別存儲在不同數(shù)據(jù)庫中。接下來通過本文給大家介紹數(shù)據(jù)庫中跨庫數(shù)據(jù)表的運算方法,感興趣的朋友跟隨小編一起看看吧2018-11-11利用帶關(guān)聯(lián)子查詢Update語句更新數(shù)據(jù)的方法
這篇文章主要介紹了利用帶關(guān)聯(lián)子查詢Update語句更新數(shù)據(jù)的方法,需要的朋友可以參考下2014-08-08Navicat快速導(dǎo)入和導(dǎo)出sql文件的方法
Navicat是MySQL非常好用的可視化管理工具,功能非常強大,能滿足我們?nèi)粘?shù)據(jù)庫開發(fā)的所有需求。今天教大家如何導(dǎo)入和導(dǎo)出SQL文件,感興趣的朋友跟隨小編一起看看吧2021-05-05MySQL與Oracle 差異比較之四條件循環(huán)語句
這篇文章主要介紹了MySQL與Oracle 差異比較之四條件循環(huán)語句,需要的朋友可以參考下2017-04-04梧桐數(shù)據(jù)庫與`mysql`及`oracle`關(guān)于交換服務(wù)器編號的`SQL`寫法分析(推薦)
本文介紹了如何通過SQL查詢實現(xiàn)服務(wù)器編號的交換操作,以優(yōu)化數(shù)據(jù)中心內(nèi)部服務(wù)器的布局,文章說明了不同數(shù)據(jù)庫(如梧桐數(shù)據(jù)庫、MySQL和Oracle)的建表語句、數(shù)據(jù)插入以及SQL實現(xiàn)思路,通過具體的SQL查詢,文章展示了如何在不同數(shù)據(jù)庫中交換服務(wù)器編號,并解釋了每個部分的功能2024-11-11dbeaver批量導(dǎo)出數(shù)據(jù)到另一個數(shù)據(jù)庫的詳細圖文教程
DBeaver是一款數(shù)據(jù)庫管理軟件,小巧易用,最主要其官方版就可以滿足平常得任務(wù)需求,這篇文章主要給大家介紹了關(guān)于dbeaver批量導(dǎo)出數(shù)據(jù)到另一個數(shù)據(jù)庫的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2024-03-03