微信小程序与 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 协议》,转载必须注明作者和本文链接
                      本帖由系统于 7年前 自动加精
            
                 
           mouyong 的个人博客
 mouyong 的个人博客
         
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
                     
                     
             
             
             
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: