为防止API请求的参数或者返回的结果内容暴露,所以对PHP项目请求的参数和响应的结果进行加密。
下面以ThinkPHP8 为例,也支持 thinkphp6。
准备:
ThinkPHP8 (API端)
vue3(前端,vue2适用)
要点:
一、服务端(API端)配置
①响应(参数)内容加密函数解析,代码说明:
$data = []; //加密的数据
$method = 'AES-128-CBC'; //加密方式 下面说明
$pwd='params'.time(); //加密密钥
$iv='params_iv_123456'; //初始化向量 长度根据加密方式来确定
//加密 使用openssl_encrypt函数进行AES加密
$result = openssl_encrypt(json_encode($data), "AES-128-CBC", $pwd, 0, $iv);
return $result;
/**
* 加密(解密)方式说明
*AES:高级加密标准。这是加密算法的名称(对称加密)。其他对称加密算法有:DES,3-DES等。
*128:这可能是指密钥大小。 AES加密使用3种密钥大小(128位,192位和256位)。
*AES中的块大小也是128位。
*CBC:这是您想要的加密模式。有许多加密模式,这取决于您希望算法运行的速度,并行度和安全级别。
*一些模式*是CBC(密码块链接),ECB(电子密码本),CFB(密码反馈),CTR(计数器)等。
*
*例如:
*AES-128-ECB
*AES-256-CBC
*/
②请求(参数)内容解密,代码说明:
$data = ''; //解密字符串
$method = 'AES-128-CBC'; //解密方式
$pwd='params'.time(); //解密密钥
$iv='params_iv_123456'; //初始化向量 长度根据解密方式来确定
//解密 使用openssl_decrypt函数进行AES解密
$result = openssl_decrypt($data, "AES-128-CBC", $pwd, 0, $iv);
return $result;
完整代码配置(ThinkPHP5以上的项目)在用于目录(app)下的 common.php 进行全局配置:
<?php
// 应用公共文件
use think\exception\HttpResponseException;
use think\Response;
/**
* 应用公共文件
* ①统一数据返回格式
* ②参数加密
* ③参数解密
* ④图片/文件上传
*
*/
/**
* 统一返回数据格式
* 状态码 描述
* 200 请求成功
* 204 请求成功,未返回实体,比如option请求,
* 400 错误的请求
* 401 认证失败,这个一般在token验证那里
* 403 拒绝访问
* 404 请求的资源不存在
* 422 参数验证错误
* 500 服务器错误
*/
function result(string $msg = 'error', array $data = [], int $code = 200, string $type = 'json'): Response
{
$result = [
"code" => $code,
"msg" => $msg