PHP怎么实现AES-128-CBC-PKCS5Padding加密
最近在工作中负责对接 API,数据接口交互过程中,不可避免会有一些敏感数据的传输,为了使数据交互更加安全,因此对数据进行加密。
对方的要求是对接口的业务数据进行 AES-128-CBC-PKCS5Padding
加密,然后再做 Base64
编码将得到的最终字符串进行提交,也给到了加密方式对应的密钥(key)和初始化向量(偏移量)。
实现函数如下:
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**
本文出至:学新通
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通
- 本文地址: https://www.swvq.com/boutique/detail/15597
- 联系方式: luke.wu@swvq.com
- 来源链接: www.php.cn/php-weizijiaocheng-481439.html
系列文章
更多
同类精品
更多
精彩评论
-
docker hub 进不去怎么办
PHP中文网 03-15 -
2023年最新的28道PHP面试题附答案
PHP中文网 03-27 -
windows上查看nginx是否启动
PHP中文网 04-19 -
推荐五款xml编辑工具
PHP中文网 03-04 -
navicat怎样清除注册表
PHP中文网 04-05 -
ChatGPT应用通过Axios+EventSource使用GPT3.5 API
uWydnA 03-13 -
强力推荐10款好看使用的Bootstrap后台管理系统模板
PHP中文网 03-09 -
vscode怎么调整代码大小两种方法
PHP中文网 03-11 -
navicat连接sqlserver数据库
PHP中文网 04-03 -
navicat导入csv文件
PHP中文网 03-30