139 lines
4.8 KiB
Markdown
139 lines
4.8 KiB
Markdown
## $Navicat$中怎么查看已连接保存的密码
|
||
|
||
|
||
**[参考链接](https://www.xingjiri.com/index.php/archives/26/)**
|
||
|
||
- 首先 导出连接,点击文件,选择导出连接
|
||
- 这里记着 导出密码!!! 不然导出的文件里不包含加密的密码
|
||
- 获取到 connections.ncx 文件
|
||
- 找到 文件里 password 字段的值
|
||
- 使用记事本打开connections.ncx 文件
|
||
- 然后CTRL+F查找password,将字段值进行复制
|
||
|
||
- 开始破译密码
|
||
- **工具网址:https://tool.lu/coderunner/**
|
||
|
||
|
||
```php {.line-numbers}
|
||
<? 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');
|
||
$decode = $navicatPassword - > decrypt('474BCC404BEB77220313D26ABA8AC8D064E2F86E58FCA802BA9A5A54EE67F4F3');
|
||
echo $decode.
|
||
"\n";
|
||
```
|
||
|
||
**解密结果:**
|
||
```
|
||
DsideaL4r5t6y7u!@#
|
||
```
|
||
|