问题描述最近开发一个微信小程序,涉及到加密数据(encryptedData)的解密。使用PHP代码。运行后报错mcrypt_module_xxxisdeprecated,提示方式已过时。经过研究发现是php7.1版本导致的,可以使用openssl的方式代替解密。首先,我们要知道微信使用的是AES-128-CBC加密方式:所以我们也应该使用openssl:/***解密密文*@paramstring$aesCipher需要解密的密文*@paramstring$aesIV解密的初始向量*@returnstring解密明文*/publicfunctiondecrypt($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){returnarray(ErrorCode::$IllegalBuffer,null);}try{//去除补码$pkc_encoder=newPKCS7Encoder;$result=$pkc_encoder->decode($decrypted);}catch(Exception$e){//打印$e;返回数组(ErrorCode::$IllegalBuffer,null);}返回数组(0,$结果);}特别注意很多解密失败是因为在使用openssl_decrypt解密时又用到了base_decode。其实微信demo在调用这个方法之前已经对所有参数进行了base_decoded一次:byKingFer
