• 查看Navicat已保存数据库密码


    在使用Navicat 是都是习惯性的保存了密码,久而久之后 就会忘记数据库密码, 这就很不舒服了,

    但是,这有个技巧,可以查看navicat 已连接保存的密码

    首先去 导出连接

    ​ 导出连接获取到 connections.ncx 文件

    image-20200905224515544

    这里记着 导出密码!!! 不然导出的文件里不包含加密的密码

    image-20200905224725708

    然后找到 文件里 password 字段的值

    把他复制出来

    image-20200905224931883

    开始破译密码

    多亏一位Github上的大佬写了个程序;可以直接破解这个加密密码

    程序是php的;如果本地没装php也没关系 , 直接找个在线运行的工具 https://tool.lu/coderunner/

    把代码粘上去就行了

    然后把刚复制的 加密密码 替换倒数第二行 里的值 , 然后运行就行了

    1
    $decode = $navicatPassword->decrypt('999239DEBFA1960BCCB12566F1F417A6');
     

    image-20200905225818289

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    <?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 FatSmallToolsNavicatPassword;

    //需要指定版本,11或12
    $navicatPassword = new NavicatPassword(12);
    //$navicatPassword = new NavicatPassword(11);

    //解密
    //$decode = $navicatPassword->decrypt('15057D7BA390');
    $decode = $navicatPassword->decrypt('999239DEBFA1960BCCB12566F1F417A6');
    echo $decode." ";

     

    注意乱码问题:

    ​ 可能解码的时候遇到乱码,这时只需要修改一下指定的版本就行了

    这里指定11 版本是乱码的

    image-20200905230048025

    修改成12 版本就正常显示了

    image-20200905230229128

    • 本文作者: Ytyy
  • 相关阅读:
    Git之不明觉厉11-利其器source tree
    GUI for git|SourceTree|入门基础
    UIButton
    NSDictionary
    注释方法、代码块加快捷键注释
    UIActionSheet
    UIActivityIndicatorView
    UIPickerView
    UIImageView
    UIAlertView
  • 原文地址:https://www.cnblogs.com/deepalley/p/14423656.html
Copyright © 2020-2023  润新知