小程序解码时 php 7.0以上 mcrypt拓展无法使用 旧版本的解密解决方案 新版本在另外一篇文章
WXBizDataCrypt.php
class WXBizDataCrypt {private $appid;private $sessionKey;/*** 构造函数* @param $sessionKey string 用户在小程序登录后获取的会话密钥* @param $appid string 小程序的appid*/public function __construct($appid, $sessionKey) {$this->sessionKey = $sessionKey;$this->appid = $appid;}/*** 检验数据的真实性,并且获取解密后的明文.* @param $encryptedData string 加密的用户数据* @param $iv string 与用户数据一同返回的初始向量* @param $data string 解密后的原文** @return int 成功0,失败返回对应的错误码*/public function decryptData($encryptedData, $iv, &$data) {if (strlen($this->sessionKey) != 24) {return ErrorCode::$IllegalAesKey;}$aesKey = base64_decode($this->sessionKey);if (strlen($iv) != 24) {return ErrorCode::$IllegalIv;}$aesIV = base64_decode($iv);$aesCipher = base64_decode($encryptedData);$pc = new Prpcrypt($aesKey);$result = $pc->decrypt($aesCipher, $aesIV);if ($result[0] != 0) {return $result[0];}$dataObj = json_decode($result[1]);if ($dataObj == NULL) {return ErrorCode::$IllegalBuffer;}if ($dataObj->watermark->appid != $this->appid) {return ErrorCode::$IllegalBuffer;}$data = $result[1];return ErrorCode::$OK;}// // 注释这一段是7.0以上版本// public function decryptData( $encryptedData, $iv, &$data )// {// if (strlen($this->sessionKey) != 24) {// return ErrorCode::$IllegalAesKey;// }// $aesKey=base64_decode($this->sessionKey);// if (strlen($iv) != 24) {// return ErrorCode::$IllegalIv;// }// $aesIV=base64_decode($iv);// // $aesCipher=base64_decode($encryptedData);// $aesCipher=$encryptedData;// $pc = new Prpcrypt($aesKey);// $result = $pc->decrypt($aesCipher,$aesIV);// // var_dump($result);// if ($result[0] != 0) {// return $result[0];// }// $dataObj=json_decode( $result[1] );// if( $dataObj == NULL )// {// return ErrorCode::$IllegalBuffer.'--';// }// if( $dataObj->watermark->appid != $this->appid )// {// return ErrorCode::$IllegalBuffer.';;';// }// $data = $result[1];// return ErrorCode::$OK;// }}
PKCS7Encoder.php
class PKCS7Encoder {public static $block_size = 16;/*** 对需要加密的明文进行填充补位* @param $text 需要进行填充补位操作的明文* @return 补齐明文字符串*/function encode($text) {$block_size = PKCS7Encoder::$block_size;$text_length = strlen($text);//计算需要填充的位数$amount_to_pad = PKCS7Encoder::$block_size - ( $text_length % PKCS7Encoder::$block_size );if ($amount_to_pad == 0) {$amount_to_pad = PKCS7Encoder::block_size;}//获得补位所用的字符$pad_chr = chr($amount_to_pad);$tmp = "";for ($index = 0; $index < $amount_to_pad; $index++) {$tmp .= $pad_chr;}return $text . $tmp;}/*** 对解密后的明文进行补位删除* @param decrypted 解密后的明文* @return 删除填充补位后的明文*/function decode($text) {$pad = ord(substr($text, -1));if ($pad < 1 || $pad > 32) {$pad = 0;}return substr($text, 0, (strlen($text) - $pad));}}/*** Prpcrypt class** */class Prpcrypt {public $key;public function __construct($k) {$this->key = $k;}/*** 对密文进行解密* @param string $aesCipher 需要解密的密文* @param string $aesIV 解密的初始向量* @return string 解密得到的明文*/public function decrypt($aesCipher, $aesIV) {try {$module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');mcrypt_generic_init($module, $this->key, $aesIV);//解密$decrypted = mdecrypt_generic($module, $aesCipher);mcrypt_generic_deinit($module);mcrypt_module_close($module);} catch (Exception $e) {return array(ErrorCode::$IllegalBuffer, null);}try {//去除补位字符$pkc_encoder = new PKCS7Encoder;$result = $pkc_encoder->decode($decrypted);} catch (Exception $e) {//print $e;return array(ErrorCode::$IllegalBuffer, null);}return array(0, $result);}//php 7.0版本// public function decrypt( $aesCipher, $aesIV )// {// try {// // $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');// // mcrypt_generic_init($module, $this->key, $aesIV);// // //解密// // $decrypted = mdecrypt_generic($module, $aesCipher);// // mcrypt_generic_deinit($module);// // mcrypt_module_close($module);// $decrypted = openssl_decrypt($aesCipher,'AES-128-CBC',$this->key,OPENSSL_ZERO_PADDING,$aesIV);// // var_dump($decrypted);// } catch (Exception $e) {// return array(ErrorCode::$IllegalBuffer, null);// }// try {// //去除补位字符// $pkc_encoder = new PKCS7Encoder;// $result = $pkc_encoder->decode($decrypted);// } catch (Exception $e) {// //print $e;// return array(ErrorCode::$IllegalBuffer, null);// }// return array(0, $result);// }}
小程序解码时 php 7.0以上 mcrypt拓展无法使用 旧版本的解密解决方案 新版本在另外一篇文章相关推荐
- 熊晨沣蓝牙实战--小程序蓝牙连接2.0
微信小程序蓝牙连接2.0说明: 1.本版本区分了ANDROID和IOS系统下蓝牙连接的不同方式. 2.兼容了更多情况下的链接包括: (1)未开启设备蓝牙,当监听到开启了蓝牙后自动开始连接. (2)初始 ...
- 小程序 a标签_微慕WordPress小程序增强版V2.0新版上线
2020年7月10日,我进行了一场微信小程序的直播,直播主题:微慕小程序增强版v2.0版新功能说明, 在直播里对微慕增强版v2.0版全面阐述了新版本增加的功能. 微慕小程序增强版定位是使用wordpr ...
- 橘子CPS联盟小程序操作手册2.0
橘子CPS联盟小程序操作手册2.0 步骤1.申请小程序 2.橘子CPS联盟申请绑定小程序3.添加渠道活动4.发布小程序5.购买卡密 1.申请小程序 微信官方申请小程序 https://mp.weixi ...
- 2022最新 wifi大师小程序独立版3.0.8
简介: wifi大师小程序独立版3.0.8,安装源码到根目录 1.网站运行目录public 2.PHP7.2,开通SSL 3.导入数据库文件 4.修改数据库文件里application/databas ...
- 多多小程序(doodoo)发布1.0,基于node,vue开发的微信小程序系统
多多小程序(doodoo)发布1.0,基于Doodoo.js -- 中文最佳实践Node.js Web快速开发框架,支持Koa.js, Express.js中间件.包含多项功能改进,及Bug修复. 更 ...
- 图书云小程序体验版1.0.1发布
图书云小程序体验版1.0.1发布 ,关注公众号[图书云]即可通过菜单进入小程序! 图书云为共享图书平台,向附近的朋友借书.同事.群友.俱乐部好友借书!图书云让小伙伴们享受便捷的移动图书馆服务,每个人都 ...
- php瑜伽馆源码,深蓝健身房瑜伽馆行业小程序源代码4.15.0
分享深蓝健身房瑜伽馆行业小程序源代码 4.15.0 优化订(小鱼源码下载)单信息地充值余额地显示与升级会员品级地显示,站长亲测深蓝健身房瑜伽馆行业小程序源代码安装与后端地功能设置生存添加教练添加课程添 ...
- (已更新)Thinkphp课程表小程序源码v1.0.0全开源版(前后端分离)
源码功能介绍 1.情侣功能 2.情侣间留言 3.情侣间互相设置课程表背景 4.自己日.周课程表背景设置 5.教务系统课程表导入 6.导入别人分享的课表 7.导入别人分享的单课 8.多校支持 9.首页顶 ...
- Thinkphp课程表小程序源码v1.0.0全开源版(前后端分离)
源码介绍 练手Lab课程表小程序源码是一个基于Thinkphp系统进行开发的前后端分离系统. 源码功能介绍 1.情侣功能 2.情侣间留言 3.情侣间互相设置课程表背景 4.自己日.周课程表背景设置 5 ...
最新文章
- 异地多活实践与设计思考点归纳
- Linux一些经典书籍
- yum搭建本地仓库、国内源、下载rpm包、源码安装
- 程序员经典面试题,高并发系统,一般需要怎么做
- 用代码建立与数据库的连接 c#连sqlserver
- 内存cgroup---CGroup中参数由来篇
- c 子类对象 访问父类对象受保护成员_面向对象三大特征: 继承
- 6.1 ELMo数学理解
- [LeetCode] 47. Permutations II_Medium tag: DFS, backtracking
- paip.提高用户体验----增添开始菜单类似360小助手按钮总结 (补充c925)
- 乐优商城(02)--商品分类
- C# SplitContainer控件实现折叠展开面板
- VAX使用技巧,所有VS版本通用
- 数据结构-左倾红黑树
- Windows照片查看器
- Tree03-TreeAndTreeMethod
- 解决:Excel 下拉项数据报 输入内容不能大于255个字符
- 如何取SQL结果集的第一条记录
- 将html转为表格,将HTML表格转换为Excel,浏览器Stucks
- 720phi10p 和 720p有什么区别_红米note9和红米9哪个好_红米note9和红米9的区别
热门文章
- scikit-klearn之 1.决策树
- Java自动化测试框架-07 - TestNG之Factory篇 - (详细教程)
- insert into 多张表_麦克维尔直流变频多联机弹簧阻尼减震器_淞江集团-李工
- windows虚拟机_Windows电脑体验macOS,装黑苹果?虚拟机也可以的——VMWare篇
- Guava的介绍与使用示例
- [Perl系列—] 1. 清空目录及目录中的所有文件
- log4j在web中的使用
- SpringCloudGateway(一) 概览
- 电脑文件夹加密软件_上海靠谱电脑资料加密软件解决方案
- linux挂载CentOS yum,centos7本地挂载yum仓库