求PHP微信退款回调ASE-256-ECB解密代码怎么写?

申请微信退款,回调函数上成获取信息,但是解密一直不成功,用的就是网上找的的代码

阅读 4k
2 个回答

是AES,用openssl库,别用mcrypt

    /**
     * 对解密后的明文进行补位删除
     *
     * @param string $text 解密后的明文
     * @return string
     *
     */
    private function pkcs7Unpad($text) {
        $pad = ord(substr($text, -1));
        if ($pad < 1 || $pad > 32) {
            $pad = 0;
        }

        return substr($text, 0, (strlen($text) - $pad));
    }

    /**
     * 对密文进行解密
     *
     * @param string $encrypted 需要解密的密文
     * @return string 解密得到的明文
     */
    public function decrypt($encrypted) {
        $iv = substr($this->_key, 0, 16);
        $decrypted = openssl_decrypt($encrypted, 'AES-256-CBC', $this->_key, OPENSSL_ZERO_PADDING, $iv);
        //去除补位字符
        $result = $this->pkcs7Unpad($decrypted);
        //去除16位随机字符串 加密时添加16为随机字符串
        if (strlen($result) < 16) {
            return "";
        }
        $content = substr($result, 16, strlen($result));
        $lenList = unpack("N", substr($content, 0, 4));
        $contentLen = $lenList[1];

        return substr($content, 4, $contentLen);
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题