QQ截图20170517143241.jpg

一、问题

微信小程序开发的加解密demo代码中,使用了 Mcrypt ,而mcrypt在php7.1已经算是被废弃了。

二、解决

赶紧使用 openssl 吧

主要是在 Prpcrypt 这个类里面中使用的

1. 之前的代码:

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);
    }

2. 修改之后的代码:

PS: 下面代码中,如果传过来的数据已经base64了,则不需要进行base64的操作

/**
     * 对密文进行解密
     * @param string $aesCipher 需要解密的密文
     * @param string $aesIV 解密的初始向量
     * @return string 解密得到的明文
     */
    public function decrypt( $aesCipher, $aesIV )
    {
        try {
            //解密
            $decrypted = openssl_decrypt(base64_decode($aesCipher), 'aes-128-cbc', base64_decode($this->key), OPENSSL_RAW_DATA, base64_decode($aesIV));
            // dump(($aesCipher));
            // dump(($this->key));
            // dump(($aesIV));
        } catch (\Exception $e) {
            return false;
        }
        try {
            //去除补位字符
            $pkc_encoder = new PKCS7Encoder;
            $result = $pkc_encoder->decode($decrypted);
        } catch (\Exception $e) {
            //print $e;
            return false;
        }
        return $result;
    }

三、注意

需要安装openssl扩展!!

不过一般都会装的!!