在PHP7 中 mcrypt_module_open()已经被 OPENSSL 取代.
当然你要是还是想用 mcrypt_module_open()就安装 mcrypt 扩展.
可以看看这个文章
宝塔面板安装mcrypt扩展
在写一个东西的时候,放到服务器上发现报错了,我本地是PHP7.0,由于我宝塔用的是PHP7.2.扩展从PHP7.1.0开始废弃 链接SSH然后: yum install libmcrypt libmcrypt-devel mcrypt mhash wget http://pecl.php.net …
使用 openssl 代替 mcrypt:
WXBizDataCrypt.php
public function decryptData( $encryptedData, $iv, &$data ) { if (strlen($this->sessionKey) != 24) { return ErrorCode::$IllegalAesKey; } $aesKey=base64_decode($this->sessionKey); if (strlen($iv) != 24) { return ErrorCode::$IllegalIv; } $aesIV=base64_decode($iv); // $aesCipher=base64_decode($encryptedData); $aesCipher=$encryptedData; $pc = new Prpcrypt($aesKey); $result = $pc->decrypt($aesCipher,$aesIV); //var_dump($result); if ($result[0] != 0) { return $result[0]; } $dataObj=json_decode( $result[1] ); if( $dataObj == NULL ) { return ErrorCode::$IllegalBuffer.'--'; } if( $dataObj->watermark->appid != $this->appid ) { return ErrorCode::$IllegalBuffer.';;'; } $data = $result[1]; return ErrorCode::$OK; }
PKCS7Encoder.php
/** * 对密文进行解密 * [@param](https://my.oschina.net/u/2303379) string $aesCipher 需要解密的密文 * [@param](https://my.oschina.net/u/2303379) string $aesIV 解密的初始向量 * [@return](https://my.oschina.net/u/556800) 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_ZERO_PADDING,$aesIV); // var_dump($decrypted); } 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); }
就是这样