收藏
回答

encryptData 解密 demo 中的 php 代码 mcrypt

问题模块
API和组件

```php

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

        }

```

在 php7.1 运行中会报错    请官方 更新


最后一次编辑于  2017-06-08
回答关注问题邀请回答
收藏

2 个回答

  • Clanche
    Clanche
    2018-04-22

    @『花嫁雾语微请柬』小程序   根据你上面贴的代码,  openssl_decrypt 打印出来依然是false,解密失败,求大神解答,急!!!

    2018-04-22
    赞同
    回复
  • 影楼云选片 2019跨平台在线选片
    影楼云选片 2019跨平台在线选片
    2017-06-08
    //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跳了这个坑,搞了一个通宵研究出来的。

    2017-06-08
    赞同
    回复