源静香 發表於 2026-5-3 17:23:49

PHP+Vue实现前后端加密的轻量级方案分享

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">我的解决方式</a></li><li><a href="#_label1">用起来的样子</a></li><li><a href="#_label2">意义在哪里</a></li></ul></div><p>在做项目的时候,我遇到一个需求:前后端需要传输一些敏感数据。</p>
<p>虽然 HTTPS 已经可以保证传输安全,但在某些场景下,我还是希望能再加一层保护:</p>
<ul><li>防止接口被随便模拟调用</li><li>就算数据被截获,也看不懂里面的内容</li><li>就算用劫持的数据请求,也不进行响应</li></ul>
<p>我最开始也去找过现成的方案,确实有一些成熟的实现。</p>
<p>但问题是&mdash;&mdash;它们的功能太多、体系太重,而我的需求其实很单纯,只需要&ldquo;在请求上套一层加解密&rdquo;。</p>
<p>所以与其硬拗那些复杂的框架,不如自己写一个更轻量的版本。</p>
<p class="maodian"><a name="_label0"></a></p><h2>我的解决方式</h2>
<p>于是,我就写了一个前后端配套的小工具:</p>
<ul><li>前端:Vue 环境下的 npm 包</li><li>后端:PHP Composer 库</li></ul>
<p>核心思路是:</p>
<ul><li><strong>前端自动加密请求体</strong></li><li><strong>后端自动解密请求体</strong></li><li>开发者几乎不需要关心加解密细节,就像在用普通的请求一样</li><li>内置 AES-128-CBC 加密、签名机制、防重放攻击</li><li>允许一定的时间误差,避免前后端时钟不一致</li></ul>
<p class="maodian"><a name="_label1"></a></p><h2>用起来的样子</h2>
<p>前端示例:</p>
<p>通过 <code>npm install hejunjie-encrypted-request</code> 引用</p>
<div class="jb51code"><pre class="brush: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 =&gt; console.log(res));
</pre></div>
<p>后端示例:</p>
<p>通过 <code>composer require hejunjie/encrypted-request</code> 引用</p>
<div class="jb51code"><pre class="brush:php;">use Hejunjie\EncryptedRequest\EncryptedRequestHandler;

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

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

print_r($data); // ['name' =&gt; '张三']
</pre></div>
<p>整体就是&ldquo;即插即用&rdquo;,加密解密几乎是无感的。</p>
<p class="maodian"><a name="_label2"></a></p><h2>意义在哪里</h2>
<p>这个方案不是什么替代 HTTPS 的黑科技,它更像是一个&ldquo;小插件&rdquo;:</p>
<ul><li>HTTPS 解决传输安全</li><li>我这套方案解决&ldquo;再多一层壳&rdquo;的需求</li></ul>
<p>适合那些 <strong>对安全性有点额外要求,但又不想引入复杂框架</strong> 的项目。</p>
頁: [1]
查看完整版本: PHP+Vue实现前后端加密的轻量级方案分享