首页 > 其他分享 >ncx解密

ncx解密

时间:2024-09-12 17:15:14浏览次数:12  
标签:ncx function return string currentVector 解密 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);

//$navicatPassword = new NavicatPassword(11);



//解密

$decode = $navicatPassword->decrypt('3101B0895E804D559AA945D423422520'); echo $decode."\n";

  

标签:ncx,function,return,string,currentVector,解密,protected,result
From: https://www.cnblogs.com/zenghansen/p/18410637

相关文章

  • ipguard的安装与加解密配置
    控制策略的好与坏与目标明确性、环境适应性、实施效果、资源配置、数据支持、反馈机制、利益相关者需求、风险管理、技术支持以及组织文化等多个因素密切相关。1.IP-Guard安装基础条件1.1.资源信息介绍机器信息CPU内存磁盘空间windowsserver20164vcpu8GRAM......
  • 使用go来做加密解密文件或者字符串
    你可以使用Linux命令行中的openssl或gpg进行加密,然后在Go程序中使用相关的库来解密。方案1:使用OpenSSL进行加密,Go程序解密1.命令行加密使用openssl在命令行中对token进行加密,并保存加密结果:echo-n"your_token"|opensslenc-aes-256-cbc-a-salt-pas......
  • java加密解密
    kpackagecom.xcg.webapp.common;importjavax.crypto.BadPaddingException;importjavax.crypto.Cipher;importjavax.crypto.IllegalBlockSizeException;importjavax.crypto.NoSuchPaddingException;importjavax.crypto.spec.IvParameterSpec;importjavax.crypt......
  • 解密企业变革成功密码:基于能力规划的案例解析与深度实战指南
    在当今充满挑战的全球化和数字化时代,企业要想在竞争中胜出,不仅需要制定前瞻性的战略,还必须具备将这些战略转化为现实的能力。传统的战略执行方式往往难以应对市场的动态变化和内部复杂性,而基于能力规划(Capability-BasedPlanning,CBP)的方法则为企业提供了从理论到实践的系统化......
  • Java 后端接口入参 - 联合前端VUE 使用AES完成入参出参加密&解密
    加密效果:解密后的数据就是正常数据:后端:使用的是spring-cloud框架,在gateway模块进行操作<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.0-jre</version>......
  • JS解密工具之如何续期 Charles 的 SSL 证书
    本文由jsjiami加密/一键JS解密独家赞助有问题请私聊加密官方客服Charles是一款常用的HTTP代理工具,用于调试网络请求。然而,Charles的SSL证书会定期过期,如果SSL证书失效,你将无法对HTTPS请求进行抓包。本文将详细讲解如何续期Charles的SSL证书,并附上详细步骤图。1.......
  • 【鸿蒙实战开发】基于加解密算法框架的常见规格问题
    往期知识点整理鸿蒙(HarmonyOS)北向开发知识点记录~【鸿蒙实战开发】ArkTS多线程的多线程系列(一):ArkTS多线能力入门【鸿蒙实战开发】ArkTS多线程的多线程系列(二):基于Sendable共享对象实现跨线程通信及UI状态刷新【鸿蒙实战开发】ArkTS多线性的多线程系列(三):基于单例实现跨......
  • 有道翻译-解密sgin值
    constCryptoJS=require('crypto-js')//vartext="123456"//md5Text=CryptoJS.MD5(text).toString()////console.log(md5Text);////输出:e10adc3949ba59abbe56e057f20f883e//有道sginfunctionf(txt){functionh(t){//return......
  • Java中实现数据加密与解密
    加密与解密概述加密是将明文数据转换为密文数据的过程,而解密是将密文数据还原为明文数据的过程。Java提供了丰富的加密解密API,可以实现对称加密、非对称加密和哈希加密等多种加密方式。对称加密对称加密使用相同的密钥进行加密和解密。常见的对称加密算法包括AES、DES等。下面我们......
  • 吉林长春产权交易中心JS逆向:魔改AES请求加密与解密
    吉林长春产权交易中心JS逆向:魔改AES请求加密与解密......