麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > PHP > 正文

thinkphp微信開發之安全模式消息加密解密不成功的解決辦法

2024-05-04 23:40:42
字體:
來源:轉載
供稿:網友
使用thinkphp官方的WeChat包,使用不同模式可以成功,但是安全模式就是不行,現將分析解決結果做下記錄,對thinkphp加密解密相關知識感興趣的朋友參考下
 

 ThinkPHP框架是國內比較流行的PHP框架之一,雖然跟國外的那些框架沒法比,但優點在于,恩,中文手冊很全面,在此不多說了。

使用thinkphp官方的WeChat包,使用不同模式可以成功,但是安全模式就是不行,現將分析解決結果做下記錄。

 分析問題:

          解密微信服務器消息老是不成功,下載下微信公眾平臺官方給出的解密文件和WechatCrypt.class.php進行比對發現也沒有問題。用file_put_contents函數保存下解密后的文件進行分析。發現官方包解密的xml不是標準的xml格式,所以simplexml_load_string函數無法處理。

/**   * 對密文進行解密   * @param string $encrypt 密文   * @return string     明文   */  public function decrypt($encrypt){    //BASE64解碼    $encrypt = base64_decode($encrypt);    //打開加密算法模塊    $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');    //初始化加密算法模塊    mcrypt_generic_init($td, $this->cyptKey, substr($this->cyptKey, 0, 16));    //執行解密    $decrypt = mdecrypt_generic($td, $encrypt);    //去除PKCS7補位    $decrypt = self::PKCS7Decode($decrypt, mcrypt_enc_get_key_size($td));    //關閉加密算法模塊    mcrypt_generic_deinit($td);    mcrypt_module_close($td);    if(strlen($decrypt) < 16){      throw new /Exception("非法密文字符串!");    }    //去除隨機字符串    $decrypt = substr($decrypt, 16);    //獲取網絡字節序    $size = unpack("N", substr($decrypt, 0, 4));    $size = $size[1];    //APP_ID    $appid = substr($decrypt, $size + 4);    //驗證APP_ID    if($appid !== $this->appId){      throw new /Exception("非法APP_ID!");    }    //明文內容    $text = substr($decrypt, 4, $size);    return $text;  }  /**   * PKCS7填充字符   * @param string $text 被填充字符   * @param integer $size Block長度   */  private static function PKCS7Encode($text, $size){    //字符串長度    $str_size = strlen($text);    //填充長度    $pad_size = $size - ($str_size % $size);    $pad_size = $pad_size ? : $size;    //填充的字符    $pad_chr = chr($pad_size);    //執行填充    $text = str_pad($text, $str_size + $pad_size, $pad_chr, STR_PAD_RIGHT);    return $text;  }  /**   * 刪除PKCS7填充的字符   * @param string $text 已填充的字符   * @param integer $size Block長度   */  private static function PKCS7Decode($text, $size){    //獲取補位字符    $pad_str = ord(substr($text, -1));    if ($pad_str < 1 || $pad_str > $size) {      $pad_str= 0;    }       return substr($text, 0, strlen($text) - $pad_str);  }

解決方法:

          輸出的xml文件是這樣的

 <xml> <ToUserName><![CDATA[gh_aebd]]><//ToUserName>/n <FromUserName><![CDATA[oopVmxHZaeQkDPsRcbpwXKkH-JQ]]><//FromUserName>/n <CreateTime><//CreateTime>/n <MsgType><![CDATA[text]]><//MsgType>/n <Content><![CDATA[/uecf/u]]><//Content>/n <MsgId><//MsgId>/n <//xml>

       所以需要進行處理才能讓simplexml_load_string處理

在輸出的明文內容后面加上

 //明文內容     $text = substr($decrypt, , $size); //去掉多余的內容     $text=str_replace('<//','</', $text);        $text=str_replace('>/n','>', $text);     return $text;

安全模式就能正常使用了。

以上內容是小編給大家介紹的關于thinkphp微信開之安全模式消息加密解密不成功的解決辦法,希望大家喜歡。



注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲午夜视频 | 久久羞羞 | 91在线视频观看 | 99seav| 国产一区精品视频 | 日本欧美国产 | 91短视频在线免费观看 | 中文字幕在线视频网站 | 在线成人www免费观看视频 | 久久无毛| 一级做a爱片久久毛片a高清 | 日本精品久久久一区二区三区 | 欧美亚洲免费 | 日美av在线 | 91福利免费观看 | 久草在线视频精品 | 色播视频网站 | 欧美一级黄 | 亚洲欧美国产高清va在线播放 | 国产精品一区二区三区在线 | 精品久久久久久久久久久久久久 | 激情小说区| 久久国产夫妻视频 | 久久精品国产久精国产 | 中国a毛片| 中文字幕一二区 | 午夜精品在线视频 | 欧美国产成人在线 | 91精品国产91久久久久久丝袜 | chinese xxxx hd pron8 tube| 欧美一区二区三区久久精品视 | 美国av片在线观看 | 国产一国产一级毛片视频在线 | 蝌蚪久久窝 | 91精品国啪老师啪 | 激情av在线 | 成人免费毛片在线观看 | 久久国产在线观看 | 免费a级毛片永久免费 | 久久精品a一级国产免视看成人 | 九色免费视频 |