時間久了,當(dāng)我們以前連上了navicat 之后,密碼忘記了,但是依然能連接,此時我們想查看密碼,應(yīng)該如何操作呢?
步驟1:點擊navicat 文件選項,導(dǎo)出連接,勾選需要導(dǎo)出的數(shù)據(jù)庫,導(dǎo)出的時候一定要勾選導(dǎo)出密碼
導(dǎo)出之后,我們會得到一個connections.ncx文件中找到password,然后復(fù)制出來
復(fù)制出來password內(nèi)容
然后我們要對這個password 密碼進行解密。打開小工具 網(wǎng)站:
小工具解密網(wǎng)站
將如下PHP代碼復(fù)制進去:
<?php
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);
}
};
//需要指定版本兩種,11或12
//$navicatPassword = new NavicatPassword(11);
//這里我指定的12的版本,原先指定的11,執(zhí)行之后的密碼是亂碼
$navicatPassword = new NavicatPassword(12);
//解密
//$decode = $navicatPassword->decrypt('15057D7BA390');
$decode = $navicatPassword->decrypt('AE137B98AB3AD0F913EBEF2E8D3C52E9');
echo $decode."\n";
?>
點擊執(zhí)行,右邊運行得到密碼。
方法2:可以使用python 代碼。文章來源:http://www.zghlxwxcb.cn/news/detail-552074.html
navicat 加密方式文章來源地址http://www.zghlxwxcb.cn/news/detail-552074.html
# -*- coding: utf-8 -*-
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
# 如果text不足16位的倍數(shù)就用空格補足為16位
def add_to_16(text):
if len(text.encode('utf-8')) % 16:
add = 16 - (len(text.encode('utf-8')) % 16)
else:
add = 0
text = text + ('\0' * add)
return text.encode('utf-8')
# 加密函數(shù)
def encrypt(text):
key = 'libcckeylibcckey'.encode('utf-8')
mode = AES.MODE_CBC
iv = b'libcciv libcciv '
text = add_to_16(text)
cryptos = AES.new(key, mode, iv)
cipher_text = cryptos.encrypt(text)
print(b2a_hex(cipher_text))
# 因為AES加密后的字符串不一定是ascii字符集的,輸出保存可能存在問題,所以這里轉(zhuǎn)為16進制字符串
return b2a_hex(cipher_text)
# 解密后,去掉補足的空格用strip() 去掉
def decrypt(text):
key = 'libcckeylibcckey'.encode('utf-8')
iv = b'libcciv libcciv '
mode = AES.MODE_CBC
cryptos = AES.new(key, mode, iv)
plain_text = cryptos.decrypt(a2b_hex(text))
return bytes.decode(plain_text).rstrip('\0').replace('','')
if __name__ == '__main__':
# e=encrypt('root')
d = decrypt('AE137B98AB3AD0F913EBEF2E8D3C52E9') # 解密
# print("加密:",e)
print("解密:", d)
解密: hzjy&flzx3qc
Process finished with exit code 0
到了這里,關(guān)于【navicat 密碼查看】小技巧navicat 如何查看密碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!