Maison > Article > développement back-end > Lors du décodage de l'applet, l'extension mcrypt ne peut pas être utilisée dans PHP 7.0 ou supérieur. L'ancienne version de la solution de décryptage.
Le contenu partagé avec vous dans cet article est que l'extension mcrypt de PHP 7.0 ou supérieur ne peut pas utiliser l'ancienne version de la solution de décryptage lors du décodage du mini-programme. Elle a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. 🎜>
<br/>
WXBizDataCrypt.php
class WXBizDataCrypt { private $appid; private $sessionKey; /** * 构造函数 * @param $sessionKey string 用户在小程序登录后获取的会话密钥 * @param $appid string 小程序的appid */ public function __construct($appid, $sessionKey) { $this->sessionKey = $sessionKey; $this->appid = $appid; } /** * 检验数据的真实性,并且获取解密后的明文. * @param $encryptedData string 加密的用户数据 * @param $iv string 与用户数据一同返回的初始向量 * @param $data string 解密后的原文 * * @return int 成功0,失败返回对应的错误码 */ 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); $pc = new Prpcrypt($aesKey); $result = $pc->decrypt($aesCipher, $aesIV); 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; } // // 注释这一段是7.0以上版本 // 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; // } }
class PKCS7Encoder { public static $block_size = 16; /** * 对需要加密的明文进行填充补位 * @param $text 需要进行填充补位操作的明文 * @return 补齐明文字符串 */ function encode($text) { $block_size = PKCS7Encoder::$block_size; $text_length = strlen($text); //计算需要填充的位数 $amount_to_pad = PKCS7Encoder::$block_size - ( $text_length % PKCS7Encoder::$block_size ); if ($amount_to_pad == 0) { $amount_to_pad = PKCS7Encoder::block_size; } //获得补位所用的字符 $pad_chr = chr($amount_to_pad); $tmp = ""; for ($index = 0; $index < $amount_to_pad; $index++) { $tmp .= $pad_chr; } return $text . $tmp; } /** * 对解密后的明文进行补位删除 * @param decrypted 解密后的明文 * @return 删除填充补位后的明文 */ function decode($text) { $pad = ord(substr($text, -1)); if ($pad < 1 || $pad > 32) { $pad = 0; } return substr($text, 0, (strlen($text) - $pad)); } } /** * Prpcrypt class * * */ class Prpcrypt { public $key; public function __construct($k) { $this->key = $k; } /** * 对密文进行解密 * @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); } //php 7.0版本 // 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); // } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!