• 【navicat 密码查看】小技巧navicat 如何查看密码


    时间久了,当我们以前连上了navicat 之后,密码忘记了,但是依然能连接,此时我们想查看密码,应该如何操作呢?

    步骤1:点击navicat 文件选项,导出连接,勾选需要导出的数据库,导出的时候一定要勾选导出密码
    在这里插入图片描述

    导出之后,我们会得到一个connections.ncx文件中找到password,然后复制出来

    在这里插入图片描述
    复制出来password内容

    然后我们要对这个password 密码进行解密。打开小工具 网站:

    小工具解密网站

    将如下PHP代码复制进去:

    
    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);
        }
    };
     
     
    //需要指定版本两种,11或12
    //$navicatPassword = new NavicatPassword(11);
    //这里我指定的12的版本,原先指定的11,执行之后的密码是乱码
    $navicatPassword = new NavicatPassword(12);
     
    //解密
    //$decode = $navicatPassword->decrypt('15057D7BA390');
    $decode = $navicatPassword->decrypt('AE137B98AB3AD0F913EBEF2E8D3C52E9');
    echo $decode."\n";
    ?>
    
    
    • 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

    点击执行,右边运行得到密码。
    在这里插入图片描述

    方法2:可以使用python 代码。

    navicat 加密方式

    # -*- coding: utf-8 -*-
    
    from Crypto.Cipher import AES
    from binascii import b2a_hex, a2b_hex
    
    
    # 如果text不足16位的倍数就用空格补足为16位
    def add_to_16(text):
        if len(text.encode('utf-8')) % 16:
            add = 16 - (len(text.encode('utf-8')) % 16)
        else:
            add = 0
        text = text + ('\0' * add)
        return text.encode('utf-8')
    
    
    # 加密函数
    def encrypt(text):
        key = 'libcckeylibcckey'.encode('utf-8')
        mode = AES.MODE_CBC
        iv = b'libcciv libcciv '
        text = add_to_16(text)
        cryptos = AES.new(key, mode, iv)
        cipher_text = cryptos.encrypt(text)
        print(b2a_hex(cipher_text))
        # 因为AES加密后的字符串不一定是ascii字符集的,输出保存可能存在问题,所以这里转为16进制字符串
        return b2a_hex(cipher_text)
    
    
    # 解密后,去掉补足的空格用strip() 去掉
    def decrypt(text):
        key = 'libcckeylibcckey'.encode('utf-8')
        iv = b'libcciv libcciv '
        mode = AES.MODE_CBC
        cryptos = AES.new(key, mode, iv)
        plain_text = cryptos.decrypt(a2b_hex(text))
        return bytes.decode(plain_text).rstrip('\0').replace('','')
    
    
    
    if __name__ == '__main__':
        # e=encrypt('root')
        d = decrypt('AE137B98AB3AD0F913EBEF2E8D3C52E9')  # 解密
        # print("加密:",e)
        print("解密:", d)
    
    
    
    
    • 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
    解密: hzjy&flzx3qc
    
    Process finished with exit code 0
    
    • 1
    • 2
    • 3
  • 相关阅读:
    使用Webpack打包TS代码
    【Deep Learning 框架】Python中各类框架解释
    Redis设计与实现(五)| Sentinel哨兵
    万万没想到有一天居然可以在 Mac 上玩游戏,而且还是原神!
    vue3(element-plus)+springboot
    非零基础自学Java (老师:韩顺平) 第10章 面向对象编程(高级部分) 10.3 代码块
    领域驱动设计——领域的整体设计
    全栈的自我修养 ———— js中的拖拽api
    springboot项目下logback配置
    C语言学习系列-->字符函数和字符串函数
  • 原文地址:https://blog.csdn.net/u013421629/article/details/126518685