微信小程序加密數據(encryptedData)解密中的PHP代碼,php7.1報錯

問題描述

最近在開發微信小程序涉及到加密數據(encryptedData)的解密,用的是PHP代碼,在運行後報錯mcrypt_module_ xxx is deprecated,提示方法已過期了php


經研究得知,是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了一次:php7

圖片描述

by KingFerthis

相關文章
相關標籤/搜索