【PHP】微信开放平台—消息加解密-php7.1 使用openssl代替Mcrypt

### 1、问题

微信开发小程序消息加解密,官方给出的dome中使用正常,最近升级了7.1发现接收消息不能解密了,最后查了日志又查了各种资料发现Mcrypt函数php7.1开始已经被废弃;

2、解决方式

  • Prpcrypt类中使用openssl代替Mcrypt
  • 官方代码:
/**
*对密文进行解密
*@param string $encrypted 需要解密的密文
*@return string 解密得到的明文
*/
public function decrypt($encrypted,$appid){
    try{
        //使用BASE64对需要解密的字符串进行解码
        $ciphertext_dec=base64_decode($encrypted);
        $module=mcrypt_module_open(MCRYPT_RIJNDAEL_128,'',MCRYPT_MODE_CBC,'');
        $iv=substr($this->key,0,16);
        mcrypt_generic_init($module,$this->key,$iv);
        //解密
        $decrypted=mdecrypt_generic($module,$ciphertext_dec);
        mcrypt_generic_deinit($module);
        mcrypt_module_close($module);
    }
    catch(Exception$e)
    {
        return array(ErrorCode::$DecryptAESError,null);
    }
    try
    {
        //去除补位字符
        $pkc_encoder=new PKCS7Encoder;
        $result=$pkc_encoder->decode($decrypted);
        //去除16位随机字符串,网络字节序和AppId
        if(strlen($result))
        return "";
        $content=substr($result,16,strlen($result));
        $len_list=unpack("N",substr($content,0,4));
        $xml_len=$len_list[1];
        $xml_content=substr($content,4,$xml_len);
        $from_appid=substr($content,$xml_len+4);
    }catch(Exception $e){
        //print $e;
        return  array(ErrorCode::$IllegalBuffer,null);
    }
    if($from_appid!=$appid) 
        return array(ErrorCode::$ValidateAppidError,null);
    return array(0,$xml_content);
}

/**
*修改之后代码:
*对密文进行解密
*@param string $encrypted 需要解密的密文
*@return string 解密得到的明文
*/
public function decrypt($encrypted,$appid){
    try{
        $iv=substr($this->key,0,16);
        $decrypted=openssl_decrypt(base64_decode($encrypted),'AES-256-CBC',$this->key,OPENSSL_RAW_DATA,$iv);
    }catch(Exception $e){
        return array(ErrorCode::$DecryptAESError,null);
    }
    try{
        //去除补位字符
        $pkc_encoder=new PKCS7Encoder;
        $result=$pkc_encoder->decode($decrypted);
        //去除16位随机字符串,网络字节序和AppId
        if(strlen($result))
        return "";
        $content=substr($result,16,strlen($result));
        $len_list=unpack("N",substr($content,0,4));
        $xml_len=$len_list[1];
        $xml_content=substr($content,4,$xml_len);
        $from_appid=substr($content,$xml_len+4);
    }catch(Exception $e){
        //print $e;
        return array(ErrorCode::$IllegalBuffer,null);
    }
    if($from_appid!=$appid)
        return array(ErrorCode::$ValidateAppidError,null);

    return array(0,$xml_content);
}