thinkphp微信开发之消息加密解密的示例分析
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍thinkphp微信开发之消息加密解密的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用thinkphp官方的WeChat包,使用不同模式可以成功,但
千家信息网最后更新 2026年11月02日thinkphp微信开发之消息加密解密的示例分析
这篇文章主要介绍thinkphp微信开发之消息加密解密的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
使用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文件是这样的
<\/ToUserName>\n <\/FromUserName>\n 1448944621<\/CreateTime>\n <\/MsgType>\n <\/Content>\n 6223169761311044588<\/MsgId>\n<\/xml>
所以需要进行处理才能让simplexml_load_string处理
在输出的明文内容后面加上
//明文内容$text = substr($decrypt, 4, $size); //去掉多余的内容$text=str_replace('<\/','', $text); $text=str_replace('>\n','>', $text); return $text;以上是"thinkphp微信开发之消息加密解密的示例分析"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
字符
内容
分析
加密
明文
长度
消息
官方
文件
模块
算法
处理
加密解密
示例
开发
成功
函数
密文
模式
篇文章
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
南京欣网互联网络科技
科技创新与互联网经济
科技互联网项目
麻工互联网科技
广州互联网科技公司
青岛互联网科技公司
杭州互联网科技公司
广州紫鲸互联网科技
互联网科技大会案例
深圳卡尔迅互联网科技有限公司怎么样
成都仁贤领冠互联网科技有限公司
花神(南京)互联网科技有限公司
消费医药和互联网科技
互联网科技和法律行业
明优互联网科技有限公司
互联网风格科技公司名称
上海乐五互联网科技有限公司
信承诺互联网科技有限公司
互联网科技创新方面的资料
互联网科技快速发展优美句子
中盈科技互联网信息有限公司
随着互联网科技发展
辽宁互联网新科技
健康食品互联网创新科技园项目
互联网科技股为什么大涨
2021世界互联网领先科技成果发布
互联网领先科技活动
安徽零酒互联网科技有限公司
绵阳真晨互联网科技有限公司
互联网科技品牌