首页 > 其他分享 >Navicat 密码还原

Navicat 密码还原

时间:2023-11-20 12:12:20浏览次数:32  
标签:function return string currentVector Navicat 密码 protected result 还原

<?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);

//解密
$decode = $navicatPassword->decrypt('AA406DB0A2597A2D2C25AD04968BC9D434F9673568B32939F4DA6B178493E020A601D5FB8AE8F7D3EE18D165640844FF');
echo $decode."\n";

 

标签:function,return,string,currentVector,Navicat,密码,protected,result,还原
From: https://www.cnblogs.com/LF-place/p/17843638.html

相关文章

  • Navicat 基于 GaussDB 主备版的快速入门
    本文分享自华为云社区《Navicat基于GaussDB主备版的快速入门》,作者:Navicat_China。NavicatPremium(16.2.8Windows版或以上)已支持对GaussDB主备版的管理和开发功能。它不仅具备轻松、便捷的可视化数据查看和编辑功能,还提供强大的高阶功能(如模型、结构同步、协同合作、数据迁......
  • (强烈建议收藏)如果前任同事与公司发生不愉快把设备登录与恢复密码都修改了,怎么办?!(华为设
    作者:网络之路一天 首发公众号:网络之路博客(ID:NetworkBlog)配合视频看效果更佳:https://b23.tv/2xJMeF(建议电脑端),或者B站搜索:网络之路Blog1、非常糟糕,bootrom跟console都忘记了(被修改了)怎么处理?(1)、设备较老的只能返厂了(2)、可以按设备的RST/PNP进行恢复比如AR路由器的15/160/200系列,NE......
  • 修改宝塔面板的密码
    [root@iZ0jli4z283gmz8eumt9gqZ~]#bt===============宝塔面板命令行==================(1)重启面板服务(8)改面板端口(2)停止面板服务(9)清除面板缓存(3)启动面板服务(10)清除登录限制(4)重载面板服务(11)设置是否开启IP+......
  • 本地设备名已在使用中。此连接尚未还原。
    本地设备名已在使用中。此连接尚未还原。 在出现的问题的WindowsXP客户端上使用\\ip(*.*.*.*)的方式访问共享文件夹,测试是否能够正常。 我本机是删除了密码,用户名与NAS机上的用户名相同。用\\IP方式重新访问时,重新输入NAS机的用户名和密码后,解决。......
  • Navicat Premium 16 安装并激活图文教程(亲测可行)
    NavicatPremium16安装并激活图文教程(亲测可行)写在前面:网上的po_jie套路很雷同,但是目前官网下载的NavicatPremium16软件包已经修复了永久激活的bug(网上流传的激活方式不行了),这里提供未更新前的软件安装包(可以永久激活)。一、下载安装包navicat161_premium_cs_x64.exe:ht......
  • 理解备份还原与恢复
    理解备份还原与恢复备份 backup 业务数据的副本(手工或RMAN)还原 restore 把原来的备份重新覆盖回来(过程)恢复 recover 利用日志把数据前滚出来(利用归档日志+在线日志过程)完全恢复:将你的数据库恢复到宕机前最后一次提交状态。不完全恢复:将你的数据恢复到你指定的某一时间点。......
  • 【第3章】密码学基本理论(信息安全工程师软考)
    3.1密码学概况 3.1.1密码学发展简况 密码学是一门研究信息安全保护的科学,以实现信息的保密性、完整性、可用性及抗抵赖性。密码学主要由密码编码和密码分析两个部分组成。 密码编码学研究信息的变换处理以实现信息的安全保护,而密码分析学则研究通过密文获取对应的明文......
  • 第二章:密码学基础
    思维导图:总览全局各个小节的思维导图及简介:第一节:密码学概述1.密码的起源:1.1古代岩画*法国拉斯科洞窟岩画、挪威阿尔塔岩画、宁夏银川贺兰山岩画1.2古文字形成*楔形文字的数字符号、罗马数字符号、阿拉伯数字*斐斯托斯圆盘1.3古代隐写术*蜡封技术隐藏信息、隐写墨水1......
  • 数据库的备份与还原
    数据库的备份与还原一、使用mysqldump命令进行备份1、备份所有数据库mysqldump-uroot-p123456-a>filename.sql2、备份部分数据库mysqldump-uroot-p123456--databasesdbname1dbname2>filename.sql3、备份某个数据库中的某些表mysqldump-uroot-p123456dbname1......
  • 在Linux上设置MySQL的简单密码
    在Linux上更改MySQL的密码导航目录在Linux上更改MySQL的密码导航1、先查看之前生成的随机密码2、输入密码加入数据库3、先设置一个符合密码验证难度比较大的密码3.1一开始尝试了简单的不行3.2选择难度大的成功了4、把限制密码位数设小一点,复杂度类型调底一点4.1将密码复杂度校验......