一个轻量的PHP+Vue的前后端加密方案,写给有类似需求的朋友

在做项目的时候,我遇到一个需求:前后端需要传输一些敏感数据。

虽然 HTTPS 已经可以保证传输安全,但在某些场景下,我还是希望能再加一层保护:

  • 防止接口被随便模拟调用
  • 就算数据被截获,也看不懂里面的内容
  • 就算用劫持的数据请求,也不进行响应

我最开始也去找过现成的方案,确实有一些成熟的实现。

但问题是------它们的功能太多、体系太重,而我的需求其实很单纯,只需要"在请求上套一层加解密"。

所以与其硬拗那些复杂的框架,不如自己写一个更轻量的版本。

我的解决方式

于是,我就写了一个前后端配套的小工具:

  • 前端:Vue 环境下的 npm 包
  • 后端:PHP Composer 库

核心思路是:

  • 前端自动加密请求体
  • 后端自动解密请求体
  • 开发者几乎不需要关心加解密细节,就像在用普通的请求一样
  • 内置 AES-128-CBC 加密、签名机制、防重放攻击
  • 允许一定的时间误差,避免前后端时钟不一致

用起来的样子

前端示例:

通过 npm install hejunjie-encrypted-request 引用

js 复制代码
import { encryptRequest, EncryptOptions } from "hejunjie-encrypted-request";

const options: EncryptOptions = {
  appKey: "your-app-key", // 签名密钥,用于接口签名校验(32位字母或数字)
  aesKey: "your-aes-key", // AES 加密的密钥(16位)
  aesIv: "your-aes-iv", // AES 加密的初始化向量(16位)
  token: "optional-token", // 可选的认证令牌,PHP 端可用于用户验证
};
// 请求数据
const data = { name: "张三" };
// 生成密文
const encrypted = encryptRequest(data, options);
// 发送请求
request.post("/api/user/info", encrypted)
  .then(res => console.log(res));

后端示例:

通过 composer require hejunjie/encrypted-request 引用

php 复制代码
use Hejunjie\EncryptedRequest\EncryptedRequestHandler;

$param = $_POST; // 自行获取前端请求的参数

$handler = new EncryptedRequestHandler();
try {
    $data = $handler->handle(
        $param['en_data'] ?? '',
        $param['timestamp'] ?? '',
        $param['sign'] ?? ''
    );
} catch (\Hejunjie\EncryptedRequest\Exceptions\SignatureException $e) {
    echo "签名错误: " . $e->getMessage();
} catch (\Hejunjie\EncryptedRequest\Exceptions\TimestampException $e) {
    echo "时间戳错误: " . $e->getMessage();
} catch (\Hejunjie\EncryptedRequest\Exceptions\DecryptionException $e) {
    echo "解密错误: " . $e->getMessage();
}

print_r($data); // ['name' => '张三']

整体就是"即插即用",加密解密几乎是无感的。

意义在哪里

这个方案不是什么替代 HTTPS 的黑科技,它更像是一个"小插件":

  • HTTPS 解决传输安全
  • 我这套方案解决"再多一层壳"的需求

适合那些 对安全性有点额外要求,但又不想引入复杂框架 的项目。

最后

本来只是我项目里的一个小需求,后来觉得可以抽象成库,就整理出来开源了:

如果你也遇到类似场景,希望它能帮你省下一些时间。

相关推荐
BingoGo2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack5 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理6 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
QQ5110082856 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe6 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5