首页 > 数据库 >Navicat 查看数据库密码

Navicat 查看数据库密码

时间:2023-07-03 16:13:31浏览次数:45  
标签:function return string 数据库 currentVector Navicat 密码 result

Navicat提供了导出连接的功能,当忘记数据库密码时,可以通过导出文件中的加密密码进行解密,查看数据库密码。

  1. 导出链接,选择需要查看密码的数据库

  2. 勾选导出密码,否则无法查看

  3. 在导出文件中找到加密密码

  4. 在线工具解密,https://tool.lu/coderunner,输入PHP代码,并将文件中的加密密码替换到代码中下图位置,点击执行即可破解

  5. PHP代码如下

<?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('复制出来的密码');
echo $decode."\n";
?>  

标签:function,return,string,数据库,currentVector,Navicat,密码,result
From: https://www.cnblogs.com/LukeSteven/p/17523149.html

相关文章

  • MYSQL数据库转DM达梦数据库函数替换及注意事项
    1、调整IF函数为 case 函数MYSQL: IF(condition, value_if_true, value_if_false) if(a.class_sort_code='0301',(selectgroup_concat(sku_attr_id)sku_Attrfroma_sku_attr_relaWHEREmodel_id=a.model_idorderbysku_attr_id),'')sku_attrD......
  • 数据库
    1.关系型数据库mysqlsqlserveroraclepostgresql2.非关系型数据库redis1、Redis数据库与接口缓存2、Redis缓存穿透,缓存击穿,缓存雪崩原因与解决方案3、Redis哨兵模式集群高可用esMongoDBHBaseNeo4j3.时序数据库InfluxDBpython操作InfluxDB......
  • bartender配数据库链接
          ......
  • 数据库中用户删除不掉总是报错,依赖如何处理干净?
    摘要:本文主要介绍如何进行用户的各种依赖识别与清理,并简单介绍下推荐的权限管理方式。本文分享自华为云社区《GaussDB(DWS)用户删除不掉时候总是报错,依赖如何处理干净?》,作者:Malick。数据库的使用中,有时会遇到某些用户离职,或者角色变更时,要对其账号进行销户,权限进行回收等操作......
  • 浏览器的密码填充问题
     给input标签添加只读属性,然后在获取焦点的时候去除只读属性<inputtype="password"readonlyonfocus="this.removeAttribute('readonly');"/> 原文:https://blog.csdn.net/fireofjava/article/details/104715068......
  • 达梦数据库 表被锁的处理办法
    1、查看锁语句SELECT*FROMV$LOCKWHEREBLOCKED='1'; 字段说明:【ADDR 】列表示锁的内存地址;【TRX_ID 】列表示锁所属的事务ID;【LTYPE 】列表示锁的类型,可能是OBJECT(对象锁)或者TID(TID锁);【LMODE】列表示锁的模式,可能的取值有S(共享锁)、X(排他......
  • 数据库与数据仓库
    数据仓库,英文名称为DataWarehouse,可简写为DW或DWH。数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持(DecisionSupport)。它出于分析性报告和决策支持目的而创建。企业中一般先有数据库,然后有数据仓库,可以没有数据仓库,但是不能没有数据库。数据仓库不是大型的数......
  • Linux下轻松修改MySQL/MariaDB的Root密码
    如果你是第一次安装MySQL或MariaDB,你可以执行mysql_secure_installation 脚本来实现基本的安全设置。其中的一个设置是数据库的root密码——该密码必须保密,并且只在必要的时候使用。如果你需要修改它(例如,当数据库管理员换了人——或者被解雇了!)。修改MySQL或......
  • PostgreSQL 是一种功能丰富的关系型数据库管理系统(DBMS),具有以下特色
    PostgreSQL是一种功能丰富的关系型数据库管理系统(DBMS),具有以下特色:开源和免费:PostgreSQL是一款开源软件,它的源代码可以免费获取和修改。这意味着您可以自由地使用、分发和修改PostgreSQL,而无需支付额外的费用。可靠性和稳定性:PostgreSQL以其出色的可靠性和稳定性而闻名。它......
  • dmPython连接达梦数据库,查询含有特殊字符报错'gbk' codec can't decode byte 0xaa in
     解决方法,可以在应用连接字符串url连接属性加上local_code=1指定客户端字符编码方式。#local_code=1表示执行客户端的本地编码是UTF-8,否则默认是GBKdm_conn=dmPython.connect(user=dm_user,password=dm_password,server='localhost',port=5236,local_code=1) 参考网......