PHP7怎么加解密AES
发布于 5 年前 作者 guiyingxiong 8252 次浏览 来自 问答

微信小程序开发过程中,开启了消息推送,并且消息是完全模式,需要自己加解密,服务器语言使用PHP,但是问题来了,官方给的代码中的消息加解密方法在PHP7中并不能使用,mcrypt_module_open

等相关方法不支持了,请问在PHP7中如何加解密消息内容。下面是微信官方给的PHP5的加密方法,在php7中出现问题,求大佬解答

3 回复

请问官方提供的demo在哪儿下载? 我在这里下载的没有php语言的,只有c++的demohttps://developers.weixin.qq.com/miniprogram/dev/api/signature.html#wxchecksessionobject

你好,使用你的这个,这里报错,from_appid是空的呢

折腾半天,终于解决,将微信官方提供的pkcs7Encoder.php中的两个方法修改如下即可

/**
     * 对明文进行加密
     * [@param](/user/param) string $text 需要加密的明文
     * [@return](/user/return) string 加密后的密文
     */
    public function encrypt($text, $appid)
    {
 
        try {
            //获得16位随机字符串,填充到明文之前
            $random = $this->getRandomStr();//"aaaabbbbccccdddd";
            $text = $random . pack("N", strlen($text)) . $text . $appid;
            $iv = substr($this->key, 0, 16);
            $pkc_encoder = new Pkcsencoder();
            $text = $pkc_encoder->encode($text);
            $encrypted = openssl_encrypt($text,'AES-256-CBC',substr($this->key, 0, 32),OPENSSL_ZERO_PADDING,$iv);
            return array(ErrorCode::$OK, $encrypted);
        } catch (Exception $e) {
            //print $e;
            return array(Errorcode::$EncryptAESError, null);
        }
    }
 
    /**
     * 对密文进行解密
     * [@param](/user/param) string $encrypted 需要解密的密文
     * [@return](/user/return) string 解密得到的明文
     */
    public function decrypt($encrypted, $appid)
    {
 
        try {
            $iv = substr($this->key, 0, 16);
            $decrypted = openssl_decrypt($encrypted,'AES-256-CBC',substr($this->key, 0, 32),OPENSSL_ZERO_PADDING,$iv);
        } catch (Exception $e) {
            return array(Errorcode::$DecryptAESError, null);
        }
        try {
            //去除补位字符
            $pkc_encoder = new Pkcsencoder();
            $result = $pkc_encoder->decode($decrypted);
            //去除16位随机字符串,网络字节序和AppId
            if (strlen($result) < 16)
                return array('出错啦');
            $content = substr($result, 16, strlen($result));
            $len_list = unpack("N", substr($content, 0, 4));
            $xml_len = $len_list[1];
            $xml_content = substr($content, 4, $xml_len);
            $from_appid = substr($content, $xml_len + 4);
        } catch (Exception $e) {
            //print $e;
            return array(Errorcode::$IllegalBuffer, null);
        }
        if ($from_appid != $appid)
            return array(Errorcode::$ValidateAppidError, null);
        return array(0, $xml_content, $from_appid);
 
    }
回到顶部