php解密encrypteddata,微信小程序加密数据(encryptedData)解密中的PHP代码,php7.1报错

问题描述

最近在开发微信小程序涉及到加密数据(encryptedData)的解密,用的是PHP代码,在运行后报错mcrypt_module_ xxx is deprecated,提示方法已过时了

经研究得知,是php7.1版本引起的,可以使用openssl方法代替解密.

首先要知道微信方使用的是AES-128-CBC加密的:

​​5b89c5964874b0693cb52274e7946bd4.png

所以我们采用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了一次:

5dbe86aa7ba10a48977a4c385e776e02.png

by KingFer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值