```php
try {
$module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
mcrypt_generic_init(this->key, $aesIV);
//解密
$decrypted = mdecrypt_generic(aesCipher);
mcrypt_generic_deinit($module);
mcrypt_module_close($module);
} catch (Exception $e) {
return array(ErrorCode::$IllegalBuffer, null);
}
```
在 php7.1 运行中会报错 请官方 更新
网友回复:
//php7.1+ openssl解密 public function decrypted_openssl( $appid , $sessionKey , $encryptedData , $iv ){ if ( strlen ( $appid )==0 || strlen ( $sessionKey ) != 24 || strlen ( $iv ) != 24 || strlen ( $encryptedData )==0) { return false; } $encrypted = base64_decode ( $encryptedData ); $aesiv = base64_decode ( $iv ); if ( strlen ( $aesiv )<4 || strlen ( $aesiv )>16){ return false; } $result =openssl_decrypt( $encrypted , 'aes-128-cbc' , base64_decode ( $sessionKey ), OPENSSL_RAW_DATA, $aesiv ); //string openssl_encrypt ( string $data , string $method , string $key [, int $options = 0 [, string $iv = "" [, string &$tag = NULL [, string $aad = "" [, int $tag_length = 16 ]]]]] ) //tag_length //The length of the authentication tag. Its value can be between 4 and 16 for GCM mode. if (! $result ){ return false; } $result =json_decode( $result ); if ( empty ( $result )){ return false; } if ( $result ->watermark->appid != $appid ){ return false; } return $result ; } |
拿去用吧,俺也是从php5.x升到7.1跳了这个坑,搞了一个通宵研究出来的。
@TiHeaveN 感谢 大大的 慷慨