分享一篇微信开发之数据解密的实例教程

互联网 17-5-20
最近在用thinkphp框架写微信小程序的服务端,可能真的是处女座的缘故,从官方下载了一个php的微信解密demo,明明能整合成一个类也没多少代码的,非要分几个类来写,考虑到thinkphp 5.0的框架对于扩展的类引用路劲看着太蛋疼,所以就整合成了一个类,方便调用,有需要的朋友可以download。

<?php  /**   * 对微信小程序用户加密数据的解密示例代码.   *   * @copyright Copyright (c) 1998-2014 Tencent Inc.   */    class WXBizDataCrypt  {      private $appid;      private $sessionKey;      private $blockSize = 16;        private $OKs = 0;      private $IllegalAesKey = -41001;      private $IllegalIv = -41002;      private $IllegalBuffer = -41003;      private $DecodeBase64Error = -41004;        /**       * 检验数据的真实性,并且获取解密后的明文.       * @param $encryptedData string 加密的用户数据       * @param $iv string 与用户数据一同返回的初始向量       * @param $data string 解密后的原文       *       * @return int 成功0,失败返回对应的错误码       */      public function decryptData($appid,$sessionKey,$encryptedData, $iv, &$data )      {          $this->sessionKey = $sessionKey;          $this->appid = $appid;            if (strlen($this->sessionKey) != 24) {              return $this->IllegalAesKey;          }          $aesKey=base64_decode($this->sessionKey);            if (strlen($iv) != 24) {              return $this->IllegalIv;          }          $aesIV=base64_decode($iv);            $aesCipher=base64_decode($encryptedData);            $result = $this->decrypt($aesKey,$aesCipher,$aesIV);            if ($result[0] != 0) {              return $result[0];          }            $dataObj=json_decode( $result[1] );            if( $dataObj  == NULL )          {              return $this->IllegalBuffer;          }          if( $dataObj->watermark->appid != $this->appid )          {              return $this->IllegalBuffer;          }          $data = $result[1];          return $this->OKs;      }        /**       * 对密文进行解密       * @param string $aesCipher 需要解密的密文       * @param string $aesIV 解密的初始向量       * @return string 解密得到的明文       */      private function decrypt($key, $aesCipher, $aesIV )      {          try {                $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');                mcrypt_generic_init($module, $key, $aesIV);                //解密              $decrypted = mdecrypt_generic($module, $aesCipher);              mcrypt_generic_deinit($module);              mcrypt_module_close($module);          } catch (Exception $e) {              return array($this->IllegalBuffer, null);          }              try {              //去除补位字符              $result = $this->decode($decrypted);            } catch (Exception $e) {              //print $e;              return array($this->IllegalBuffer, null);          }          return array(0, $result);      }        /**       * 对需要加密的明文进行填充补位       * @param $text 需要进行填充补位操作的明文       * @return 补齐明文字符串       */      private function encode( $text )      {          $block_size = $this->blockSize;          $text_length = strlen( $text );          //计算需要填充的位数          $amount_to_pad = $this->blockSize - ( $text_length % $this->blockSize );          if ( $amount_to_pad == 0 ) {              $amount_to_pad = $this->blockSize;          }          //获得补位所用的字符          $pad_chr = chr( $amount_to_pad );          $tmp = "";          for ( $index = 0; $index < $amount_to_pad; $index++ ) {              $tmp .= $pad_chr;          }          return $text . $tmp;      }        /**       * 对解密后的明文进行补位删除       * @param decrypted 解密后的明文       * @return 删除填充补位后的明文       */      private function decode($text)      {            $pad = ord(substr($text, -1));          if ($pad < 1 || $pad > 32) {              $pad = 0;          }          return substr($text, 0, (strlen($text) - $pad));      }    }

有需要的自己下,ps:对微信登录授权流程有迷惑的可以留言咨询。

【相关推荐】

1. 微信公众号平台源码下载

2. 小猪cms(PigCms)微电商系统运营版(独立微店商城+三级分销系统)

3. 微信人脉王v3.4.5高级商业版 微信魔方源码

以上就是分享一篇微信开发之数据解密的实例教程的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:微信开发跳坑之Post请求

相关资讯