微信小程序官方Demo登录失败,原因:PHP7.1以上版本废弃了Mcrypt

微信小程序对称解密代码中Mcrypt被PHP7.1废弃的解决

PHP7.1以上版本已经废弃了Mcrypt,导致微信小程序官方demo无法正常

1: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);
    //var_dump($result);
    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 = $result[1];
    return ErrorCode::$OK;
}

2:PKCS7Encoder.php 和 Prpcrypt.php中

/**
    * 对密文进行解密
    * @param string $aesCipher 需要解密的密文
    * @param string $aesIV 解密的初始向量
    * @return string 解密得到的明文
    */
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);
        // var_dump($decrypted);
    } 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);
}


参考:
http://www.ptbird.cn/mcrypt-wxxcx-php7.html
http://www.thinkphp.cn/code/3141.html
 

真诚赞赏,手留余香
赞赏
随机推荐
织梦DedeCMS任意位置调用自定义字段的方法
微信支付错误两个问题的解决:curl出错,错误码:60
用Nodemon监控项目文件夹,自动重启NodeJS应用
PHP 为什么会引入 Trait
如何在ecshop首页或任意页面显示用户的当前余额
PDO 中 bindParam 和 bindValue 的区别
NodeJs通过async/await处理异步
微信支付接口返回“签名错误”的排查方法
js解析json中的一个问题
SQLite目前还不支持drop column