zoukankan      html  css  js  c++  java
  • Navicat查看数据库的密码

    前言

    • 现在数据库密码都是自动保存的,时间一长就会忘记某一个数据库的密码
    • 但是Navicat保存的数据库密码又是加密的,这时候就需要破解来获取密码
    • 整理内容来自百度经验


    一、 首先打开注册表,找到navicat中对应的数据库加密密码

    1. 使用win+R键打开命令行,输入 regedit进入注册表

    1. 找到图片中对应目录下数据库的PWD,打开并复制加密密码

    二、 然后去在线工具运行php代码破解加密内容获取密码

    1. 打开在线工具
    2. 复制最下边的代码到在线工具页面中
    3. 根据自己使用的navicat版本选择对应的版本号,修改decrypt('A3E590714589C4E9F7');中的内容为刚才复制的字符串

    1. 运行获得密码【如果选择12版本不对,可以尝试11,我个人navicat版本是12,但是使用版本号为11才能破解成功】

    <?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('A3E590714589C4E9F7');
    echo $decode . "\n";
    
    
  • 相关阅读:
    48. Rotate Image
    83. Remove Duplicates from Sorted List
    46. Permutations
    HTML5笔记
    18. 4Sum
    24. Swap Nodes in Pairs
    42. Trapping Rain Water
    Python modf() 函数
    Python min() 函数
    Python max() 函数
  • 原文地址:https://www.cnblogs.com/suhai/p/14359351.html
Copyright © 2011-2022 走看看