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

4.8 KiB
Raw Blame History

$Navicat$中怎么查看已连接保存的密码

参考链接

  • 首先 导出连接,点击文件,选择导出连接

    • 这里记着 导出密码!!! 不然导出的文件里不包含加密的密码
    • 获取到 connections.ncx 文件
  • 找到 文件里 password 字段的值

    • 使用记事本打开connections.ncx 文件
    • 然后CTRL+F查找password,将字段值进行复制
  • 开始破译密码

<? 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!@#