php实现AES/CBC/PKCS5Padding加密

接口文档

文档给过来的案例是java程序的,参照其思路,造一个php版本

构造aes对称加密

    public static function encry($data){

        $data = "要加密的数据";
        $key = '你的256位密钥'; // 密钥应该是16字节(128位),24字节(192位)或32字节(256位)

        $method = 'AES-256-CBC';
        // $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($method)); // 生成随机IV
        $iv = '';
        
        // PKCS5Padding 补齐数据
        $padding = 16 - (strlen($data) % 16);
        $data .= str_repeat(chr($padding), $padding);
        // 使用 CBC 模式加密
        $encrypted = openssl_encrypt($data, method, $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv);
        // 进行 base64 编码
        return base64_encode($encrypted);
    } 

参考了以下文章:

今天在做一个和java程序接口的架接,java那边需要我这边(PHP)对传过去的值进行AES对称加密,接口返回的结果也是加密过的(就要用到解密),然后试了很多办法,也一一对应了AES的key密钥值,偏移量(IV)的值,都还是不能和java加密解密的结果一样,我很郁闷,我很焦躁。接着我就去找了一些文档,结果发现PHP里面补码方式只有:ZeroPadding这一种方式,而java接口那边是用PKCS5Padding补码方式,发现了问题所在,就编写了如下PHP实现AES/CBC/PKCS5Padding的加密解密方式。如有错误,还请指正!下面贴出详细代码

原文参考链接:https://www.cnblogs.com/caicaizi/p/7852551.html

构造请求参数

    public function d(){
        $sql = "查询数据的sql语句";
        $row = self::db3()->query($sql);
        if(!$row) $this->error('没有需要同步的数据');
        $array = [];
        $ids = [];
        foreach ($row as $val) {
            $ids[] = $val['ID'];
            $arr = [];
            $arr['naming'] = $val['姓名'];
            $arr['phone'] = $val['手机'];
            if(strlen($val['身份证']) != 18) continue;
            $arr['idcard'] = $val['身份证'];
            $arr['actNaming'] = '大湾区汽车周';
            $arr['entryTime'] = $val['入场时间'];
            $arr['appointmentTime'] = $val['预约日期'];
            $array[] = $arr;
        }
        $array = self::encry(json_encode($array,JSON_UNESCAPED_UNICODE));
        $data = ['pushType'=>'1', 'persons'=>$array];
        $data = json_encode($data,JSON_UNESCAPED_UNICODE);
        //发送一个POST请求并设置Content-Type并获取返回结果
        $result = \fast\Http::post("http://120.234.34.7:13305/person/compare", $data, [CURLOPT_TIMEOUT => 30, CURLOPT_HTTPHEADER => ['Content-Type: application/json','keyt: fbb1cd7c7d4a45609cf11a8c934311c0']]);
        // dump($result);exit;
        $res = json_decode($result);
        if($res->success){
            $message = $res->message;
            // 成功后的逻辑
            $ids = implode(',',$ids);
            $sql = "update [data_time] SET 是否同步公安='1' WHERE id IN ($ids)";
            // dump($sql);
            $update = self::db3()->execute($sql);
            // dump($update);
            $this->success($message);
        }else{
            $this->error();
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值