美文网首页
PHP7.2下 微信解密方法失效问题

PHP7.2下 微信解密方法失效问题

作者: WikiPine | 来源:发表于2020-11-12 15:46 被阅读0次

    题记

    升级到7.2 后,涉及到微信解密的功能时候,会报 mcrypt_module_open() 未定义。查了问题,才发现已经被废弃掉了,被openssl代替了。
    参考:https://my.oschina.net/kopa/blog/1786077(网上也有其他的文章,这篇是最准确的解法)

    正文

    wXBizDataCrypt.php

    public function decryptData( $encryptedData, $iv, &$data )
        {
            if (strlen($this->sessionKey) != 24) {
                return ErrorCode::$IllegalAesKey;
            }
            $aesKey=base64_decode($this->sessionKey);
    
            
            if (strlen($iv) != 24) {
                return ErrorCode::$IllegalIv;
            }
            $aesIV=base64_decode($iv);
    
            //$aesCipher=base64_decode($encryptedData);
            $aesCipher=$encryptedData;
    
            $pc = new Prpcrypt($aesKey);
            $result = $pc->decrypt($aesCipher,$aesIV);
            if ($result[0] != 0) {
                return $result[0];
            }
         
            $dataObj=json_decode( $result[1] );
            if( $dataObj  == NULL )
            {
                return ErrorCode::$IllegalBuffer;
            }
            if( $dataObj->watermark->appid != $this->appid )
            {
                return ErrorCode::$IllegalBuffer;
            }
            $data = $dataObj->openGId;
            return ErrorCode::$OK;
        }
    

    PKCS7Encoder.php

    public function decrypt( $aesCipher, $aesIV )
        {
    
            try {
                
    //          $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
    //
    //          mcrypt_generic_init($module, $this->key, $aesIV);
    //
    //          //解密
    //          $decrypted = mdecrypt_generic($module, $aesCipher);
    //          mcrypt_generic_deinit($module);
    //          mcrypt_module_close($module);
                $decrypted = openssl_decrypt($aesCipher,'AES-128-CBC',$this->key,OPENSSL_ZERO_PADDING,$aesIV);
            } catch (Exception $e) {
                return array(ErrorCode::$IllegalBuffer, null);
            }
    
    
            try {
                //去除补位字符
                $pkc_encoder = new PKCS7Encoder;
                $result = $pkc_encoder->decode($decrypted);
    
            } catch (Exception $e) {
                //print $e;
                return array(ErrorCode::$IllegalBuffer, null);
            }
            return array(0, $result);
        }
    

    结尾

    其他文章只说了 PKCS7Encoder.php 部分的处理,并没有讲到要处理 $encryptedData 部分,导致问题无法被实际的解决。

    相关文章

      网友评论

          本文标题:PHP7.2下 微信解密方法失效问题

          本文链接:https://www.haomeiwen.com/subject/kbdpbktx.html