当前位置: 首页 > news >正文

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

 

http://www.lryc.cn/news/496695.html

相关文章:

  • Anaconda3安装及使用
  • Argon2-cffi与argon2-cffi-bindings:深入理解及其应用
  • spring boot+jpa接入达梦数据库
  • Vite构建,用NodeJS搭建一个简单的Vite服务
  • R语言机器学习论文(六):总结
  • python---面向对象---综合案例(4)
  • 如何参加华为欧拉考试?
  • 算法预刷题Day9:BM28 二叉树的最大深度
  • exp_lr_scheduler理解
  • Algorithm:河内之塔
  • 集中管理与实时审计:构建Linux集群(1300台服务器)日志平台的最佳实践
  • 在Scala中Array不可变的学习
  • vue3+vite 批量引入组件动态使用
  • 设计模式——方法链or流式接口
  • JAVA OPCUA 服务端开发,客户端连接会话监听和订阅事件监听
  • pytest相关总结
  • cin/cout的性能优化和缓冲区同步问题
  • redisson-spring-data与Spring-Data-Redis的版本关系问题
  • Puppeteer代理认证的最佳实践和示例
  • js 字符串 只显示数字
  • STM32标准库-FLASH
  • PowerShell:查找并关闭打开的文件
  • 【AI系统】昇腾异构计算架构 CANN
  • STM32 HAL库开发学习3.STM32启动浅析
  • FakeLocation 1.3.5 BETA 提示校园跑漏洞修复解决
  • Figma入门-约束与对齐
  • 腾讯元宝深度搜索AI多线程批量生成TXT原创文章软件
  • Git操作学习1
  • 【计算机网络】细说IP
  • 树与图深度优先遍历——acwing