thinkphp微信安全模式消息加密解密不成功的解决办法
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容主要讲解"thinkphp微信安全模式消息加密解密不成功的解决办法",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"thinkphp微信安全模式消息加
千家信息网最后更新 2026年11月02日thinkphp微信安全模式消息加密解密不成功的解决办法
本篇内容主要讲解"thinkphp微信安全模式消息加密解密不成功的解决办法",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"thinkphp微信安全模式消息加密解密不成功的解决办法"吧!
分析问题:
解密微信服务器消息老是不成功,下载下微信公众平台官方给出的解密文件和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文件是这样的
<\/ToUserName>\n <\/FromUserName>\n <\/CreateTime>\n <\/MsgType>\n <\/Content>\n <\/MsgId>\n <\/xml>
所以需要进行处理才能让simplexml_load_string处理
在输出的明文内容后面加上
//明文内容 $text = substr($decrypt, , $size); //去掉多余的内容 $text=str_replace('<\/','', $text); $text=str_replace('>\n','>', $text); return $text;安全模式就能正常使用了。
到此,相信大家对"thinkphp微信安全模式消息加密解密不成功的解决办法"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
字符
加密
内容
安全
成功
模式
消息
明文
长度
办法
加密解密
文件
模块
算法
处理
函数
官方
密文
方法
问题
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
重生之互联网科技帝国
鑫亿盛互联网科技
南京欣网互联网科技
万达互联网科技
火传媒上海互联网科技
互联网科技宣传片
互联网金融监管科技
科技大学互联网专业好不好
互联网和高科技公司
成都互联网科技公司100强
浙江互联网科技研学营
花神(南京)互联网科技有限公司
江阴互联网智能科技产品进口
广州市恰铎互联网科技有限公司
允成互联网科技有限公司融资
高科技互联网发展前景如何
特约风豹互联网科技为什么扣费
银川新华互联网科技学校是国营吗
绵阳真晨互联网科技有限公司
山东蛋芒互联网科技有限公司
瑰夏咖啡
上海万想互联网科技
互联网 新科技
互联网科技有限公司 翻译
科技伦理 互联网公司
互联网经济与金融科技
互联网软件和科技
深圳无忧互联网科技
半导体是互联网高科技吗
互联网科技和医药行业