zoukankan      html  css  js  c++  java
  • 查看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
  • 相关阅读:
    Codeforces Round #654 (Div. 2)A-E1
    android 学习receiver和发送广播,其中监听其他activity的启动demo;给activity加自定义权限只有指定有权限的app可以监听到
    任务栈Task的模式
    Activity生命周期学习笔记,和横竖切屏时候activity销毁时候保存数据和调用的方法
    Activity之间利用intent单个传递数据和批量传递数据
    Android学习-启动服务startActivityForResult调用activity并覆写onActivityResult()接收返回来的信息
    android学习之intent学习笔记
    android断点下载并显示进度,关于handler,和主线程不能联网采取子线程联网下载,和多线程下载学习
    Contentprovider学习笔记
    android学习之LayoutInflater的用法,在myAdapter getView()里将多个TextView组件压缩成一个View控件,并在listView里显示
  • 原文地址:https://www.cnblogs.com/deepalley/p/14423656.html
Copyright © 2011-2022 走看看