千家信息网

PHP如何实现AES-128-CBC-PKCS5Padding加密

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章将为大家详细讲解有关PHP如何实现AES-128-CBC-PKCS5Padding加密,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在工作中负责对接 API
千家信息网最后更新 2026年11月01日PHP如何实现AES-128-CBC-PKCS5Padding加密

这篇文章将为大家详细讲解有关PHP如何实现AES-128-CBC-PKCS5Padding加密,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

在工作中负责对接 API,数据接⼝交互过程中,不可避免会有一些敏感数据的传输,为了使数据交互更加安全,因此对数据进行加密。

对方的要求是对接口的业务数据进行 AES-128-CBC-PKCS5Padding 加密,然后再做 Base64编码将得到的最终字符串进行提交,也给到了加密方式对应的密钥(key)和初始化向量(偏移量)。

首先看到这个加密方式之后,就在PHP函数库中进行寻找,看看有没有对应的加密函数,然而找了一圈下来,发现并没有,需要自己实现,后了解到可以用 mcrypt 函数扩展实现,但是 mcrypt函数 自 PHP 7.1.0 起就废弃了,强烈建议不要使用本函数,只好再寻找其他加密函数库,在手册的下方看到了 OpenSSL 函数,通过了解 openssl_encrypt(加密数据) 函数发现可以实现需求,openssl_encrypt 具体的使用方法请自行看手册

实现函数如下:

  function encrypt($input, $key, $iv){      return base64_encode(openssl_encrypt($input, 'AES-128-CBC', $key, OPENSSL_RAW_DATA,$iv));  }  // 解密  function decrypt($input, $key, $iv){      return openssl_decrypt(base64_decode($input), 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);  }  // 测试加密 (我这里用的是json字符串)  $dataJson = '[{"Code": "123123", "Name": "Bob", "Address": "\u94f6\u5ddd\u5e02"}, {"Code": "464776", "Name": "Hello", "Address": "\u5317\u4eac\u5e02"}]';  print_r(encrypt($dataJson, $key, $iv));  //u9Bd8oHXDGvjZcTIX9HK1r1q+aSu+/48gsfoGVrxoScZuX8yaj/xco8F2yHt2T987JNHil9LwjAmu9o5NJaicWQDaiKwMD5o70k1A9bGjDd71xb4hXRx3ddZwI85oTQQEUQLadR5C759SdaN8AOxlzH+yGlAWTOaEleulKoRTwaknG1NCM/qIRQ8gI5lzv+D  // 测试解密  $strr = 'u9Bd8oHXDGvjZcTIX9HK1r1q+aSu+/48gsfoGVrxoScZuX8yaj/xco8F2yHt2T987JNHil9LwjAmu9o5NJaicWQDaiKwMD5o70k1A9bGjDd71xb4hXRx3ddZwI85oTQQEUQLadR5C759SdaN8AOxlzH+yGlAWTOaEleulKoRTwaknG1NCM/qIRQ8gI5lzv+D';  print_r(decrypt($strr, $key, $iv));  // [{"Code": "123123", "Name": "Bob", "Address": "\u94f6\u5ddd\u5e02"}, {"Code": "464776", "Name": "Hello", "Address": "\u5317\u4eac\u5e02"}]

自测通过,一脸得意地坐等联调。然后开始写其他业务去了,过了几天,结果一联调发现我加密的对方无法解密,对方加密的我无法解密,加密算法不匹配(挠头中。经过Google搜索相关问题,发现一句话,大概的意思就是说,在废弃的 mcrypt加密库中,128实际上指的是块大小而不是密钥大小,但是在 openssl 中的 aes-128-cbc 的128 指的是密钥大小,也就是说,在使用有效的256位密钥时,它们都是aes-256,而如果要把 mcrypt 转为 openssl 的加密方式,mcrypt 的128 需要写成 openssl 的 256 ,于是抱着试试看的态度,更改了一下 aes-128-cbc 为 aes-256-cbc,然后进行调试,最后发现联调通过了。不过具体的技术细节原理还不是很明白,先这样子修改使用,以后有时间再研究吧。

> **解决的方案,是把加密方式 AES-128-CBC 替换成 AES-256-CBC**

关于"PHP如何实现AES-128-CBC-PKCS5Padding加密"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

加密 函数 数据 密钥 方式 大小 对方 篇文章 业务 字符 字符串 手册 更多 测试 不错 实用 有效 得意 不可避免 一句话 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 国智互联网科技 智能科技公司是互联网公司吗 中资互联网科技 上海互联网科技有限公司 科技服务与互联网 猪兼强互联网科技 掌上梦互联网科技 深圳市运趣互联网科技有限公司 新华互联网科技2019 福州新华互联网科技学校 知乎 欧洲十大科技互联网公司 互联网企业和科技型企业 智腾互联网科技有限公司 晓花互联网科技有限公司网址 华夏恒生科技与互联网科技 工业互联网展湾科技股份有限公司 元气玛特互联网科技公司是外包吗 杭州披云加互联网科技有限公司 互联网科技收购价值 科技互联网企业在行动 万易互联网科技 哈尔滨秒房互联网科技有限公司 茂名市互联网科技产业园 佳云科技和互联网广告 上海钢联属于互联网科技股吗 互联网科技收购价值 保山互联网科技靠谱吗 青岛易易互联网科技 现代互联网科技公司 互联网高科技绘画
0