微信小程序加密数据(encryptedData)解密中的PHP代码,php7.1报错
问题描述
最近在开发微信小程序涉及到加密数据(encryptedData)的解密,用的是PHP代码,在运行后报错mcrypt_module_ xxx is deprecated,提示方法已过时了
经研究得知,是php7.1版本引起的,可以使用openssl方法代替解密.
首先要知道微信方使用的是AES-128-CBC加密的:
所以我们采用openssl也应该对应:
/**
     * 对密文进行解密
     * @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);
            $decrypted = openssl_decrypt($aesCipher, "aes-128-cbc", $this->key, OPENSSL_RAW_DATA ,$aesIV);
        } 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);
    }
特别注意
很多解密失败是因为在使用openssl_decrypt解密的时候又使用了一次base_decode,实际上微信demo在调用这个方法之前就已经把所有参数都base_decode了一次:
by KingFer
微信小程序加密数据(encryptedData)解密中的PHP代码,php7.1报错的更多相关文章
- Java之——实现微信小程序加密数据解密算法
		
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/79450115 一.概述 微信推出了小程序,很多公司的客户端应用不仅具有了APP.H ...
 - 微信小程序开放数据解密 AES-128-CBC 解密(C#版本)
		
最近在开发小程序,需要跟微信服务端交互,微信敏感数据都有加密返回,需要在服务端接收进行解密后再返回给客户端小程序,今天就通过C# 进行数据的解密,官方下载下来是Node.C++.php等,就是没有C# ...
 - 微信小程序用户信息解密失败导致的内存泄漏问题。
		
微信小程序获取用户解密的Session_key 然后对 encryptedData进行解密 偶尔报错 时间长了之后会报内存溢出: java.lang.OutOfMemoryError: GC over ...
 - 微信小程序用户数据解密
		
概述 通过微信web开发者工具创建登录,获取用户信息,发送至后台,进行用户数据解密 详细 代码下载:http://www.demodashi.com/demo/10705.html 一.准备工作 1. ...
 - 在微信小程序的JS脚本中使用Promise来优化函数处理
		
在我们传统的Javascript开发函数编写中,我们习惯了回调函数的处理,不过随着回调函数的增多,以及异步处理的复杂性等原因,代码越来越难读,因此诞生了使用Promise来优化JS函数处理的需求,引入 ...
 - 微信小程序AES加密解密
		
微信小程序 其实在调用一些第三方 js的时候 其实没有大家想的那么复杂,无非就是把原生js调用方式 改为微信小程序 js调用方式 废话不多说直接贴代码 其实就是将原生function 或者 对象 ...
 - C#与 微信小程序 互为加解密方案
		
CryptoJS下载地址: https://code.google.com/archive/p/crypto-js/downloads http://download.csdn.net/detail/ ...
 - 微信小程序开发——开发者工具中素材管理功能使用的注意事项
		
为什么使用“素材管理”: 微信小程序环境中本地资源图片是无法通过 WXSS 获取的,可以使用网络图片,或者 base64,或者使用<image/>标签.. 当然,如果不想这么麻烦,你可能会 ...
 - 微信小程序:wx.navigateTo中url无法跳转问题(app.json中配置的tabBar与wx.navigateTo中url引用相同页面导致)
		
今天在做微信小程序时,设置wx.navigateTo页面跳转并传参数,点击始终没有效果,代码如下: //事件处理函数 newsDetail: function (event) { console.lo ...
 
随机推荐
- C语言刷二叉树(一)基础部分
			
二叉树基础部分 144. 二叉树的前序遍历 方法一:递归 /** * Definition for a binary tree node. * struct TreeNode { * int val; ...
 - python实用脚本-定时导出数据库中的数据并且发送数据到邮箱
			
1.发送邮件脚本 #coding=utf-8 import smtplib from email.header import Header from email.mime.text import MI ...
 - js 数组/对象/日期的浅克隆
			
//封装 function clone (obj) { // Handle the 3 simple types, and null or undefined if (null == obj || & ...
 - js实现密码输入框对开启键盘大写锁定的提示(IE浏览器下有自动识别提示则不执行(用IE自带效果即可))
			
代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...
 - LeetCode-017-电话号码的字母组合
			
电话号码的字母组合 题目描述:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合.答案可以按 任意顺序 返回. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示 ...
 - tp5  单文件上传接口
			
路由: Route::post('upload','task/task/upload'); 控制器代码: //文件上传接口 public function upload() { $file = req ...
 - 理解并手写 bind() 函数
			
有了对call().apply()的前提分析,相信bind()我们也可以手到擒来. 参考前两篇:'对call()函数的分析' 和 '对apply()函数的分析',我们可以先得到以下代码: Functi ...
 - 无法加载文件 **.ps1,系统中禁止执行脚本
			
控制台执行命令后出现 无法加载文件 ******.ps1,因为在此系统中禁止执行脚本.有关详细信息,请参阅 "get-help about_signing" 在控制台执行命令: s ...
 - (转载)字符编码那点事:快速理解ASCII、Unicode、GBK和UTF-8
 - LCD1602----LiquidCrystal库的使用1
			
一:硬件介绍: 1.引脚定义: 2.屏幕介绍: 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母.数字.符号的点阵型液晶模块.它是由若干个5x7或者5x10的点阵字符位组成,每个点阵字符位 ...