Files
python/文档/Navicat密码忘记办法.md
HuangHai 1f397eca87 'commit'
2025-08-30 18:35:01 +08:00

139 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## $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!@#
```