微信小程序与 PHP 7.1 的一点小坑
前段时间写小程序接口,涉及到需要获取微信用户的数据。微信小程序提供了加密数据解密的算法。官方提供了多种编程语言。
只是天有不测风云,我当时使用的环境是 PHP 7.1 。加密函数 mcrypt_module_open()
因为过时而被废弃。
微信小程序官方提供的示例代码,PHP 文件夹中,pkcs7Encoder.php 的如下内容:
/**
* 对密文进行解密
*
* @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);
}
进行如下替换,即可解决。
/**
* 对密文进行解密
*
* @param string $aesCipher 需要解密的密文
* @param string $aesIV 解密的初始向量
* @return string 解密得到的明文
*/
public function decrypt($aesCipher, $aesIV)
{
try {
//解密
$decrypted = openssl_decrypt($aesCipher, 'AES-128-CBC', $this->key, OPENSSL_RAW_DATA, $aesIV);
} catch (\Exception $e) {
return array($this->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);
}
简单点说就是将第一段 try {} catch ($e) {} 中的 try {}
进行替换,换成可支持的 openssl_decrypt()
即可解决。
参考:PHP7.1 加密函数 mcrypt_module_open()
替换方案
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 6年前 自动加精
推荐文章: