You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
python/文档/Navicat密码忘记办法.md

4.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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