php7.0以上版本 mcrypt拓展无法使用导致小程序登录数据无法解密

来源:互联网 发布:帝国cms微信支付接口 编辑:程序博客网 时间:2024/06/01 12:05

巨坑:微信小程序用户信息加密解密(贴出数据方便大家测试)

<?php$appid = 'wx9bc23a213818b5d6';$iv    = 'aPsEWbOPfJIkhox5SEJ2Fg==';$encryptedData = 'W7qZC6qhy0q+8N0L87GpD9iasN3KgVMY7Vo9qTQvNObcOd21D3D5+dkjIAx+AmMtRRNFESt3tSxbRhQmuwUGd918AEY1hfcRkjXWIC0+vEfFYqg2faMC/QbxXiUI/QDpmfiG91StQqaq/Q9oai1uFvMjoAy+pReJ2jSau7YqcWSoAqm1kJSZjMMPkMk7O1kYniz/2Lj8rXvxhdqfkyyTlNzO/vMe9odRZy3ShBfcAnWMghH9pgSE3/qIk/aYGpc44oEXNNRE5donsmoIx0ZeUa5cUjsnfx/XUtIAK5fz4h/5AuebPLOZIWhB+NQR7VFgHt0QNyT7L5XdZNkIy4nmn4iQd9zWYS2OuTuJZW6Qr7BEJGbh7lfr24Y6iZjLVEzKwAOoY41OcDUED543y0hcX        oWk9l0QInlCLYxBPZ4gELxPAJRmGuwjN2CRaJz0F61PqLGhzq9ih1uAkPbIvnoHWC5blWuVRxc+3N8E3hGst6bAz7e1rIWb3HJSooSa67Jl';$sessionKey = '9yjhuwVi9qYKnNpqw9sgVg==';$pc = new WXBizDataCrypt($appid, $sessionKey);  //这里的解密规则可以看文档,仔细看过就能懂(已经理解过)$errCode = $pc->decryptData($encryptedData, $iv, $data);

下面是要修改的文件类:WXBizDataCrypt.php中方法

    /**     * 检验数据的真实性,并且获取解密后的明文.     * @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);        $aesCipher = $encryptedData;        $pc = new Prpcrypt($aesKey);        $result = $pc->decrypt($aesCipher, $aesIV);        if ($result[0] != 0) {            return $result[0];        }        $dataObj = json_decode($result[1]);//        echo "<pre>";print_r($dataObj);die;        if ($dataObj == NULL) {            return ErrorCode::$IllegalBuffer . '--';        }        if ($dataObj->watermark->appid != $this->appid) {            return ErrorCode::$IllegalBuffer . ';;';        }        $data = $result[1];        return ErrorCode::$OK;    }

还有解密的方法类:PKCS7Encoder.php 中的class Prpcrypt

/** * Prpcrypt class * * */class Prpcrypt{    public $key;    function __construct($k)    {        $this->key = $k;    }    /**     * 对密文进行解密     * @param string $aesCipher 需要解密的密文     * @param string $aesIV 解密的初始向量     * @return string 解密得到的明文     */    public function decrypt($aesCipher, $aesIV)    {        try {            $decrypted = openssl_decrypt($aesCipher, 'AES-128-CBC', $this->key, OPENSSL_ZERO_PADDING, $aesIV);        } catch (Exception $e) {            return array(ErrorCode::$IllegalBuffer, null);        }        try {            //去除补位字符            $pkc_encoder = new PKCS7Encoder;            $result = $pkc_encoder->decode($decrypted);        } catch (Exception $e) {            return array(ErrorCode::$IllegalBuffer, null);        }        return array(0, $result);    }}


阅读全文
0 0
原创粉丝点击