Search by

hlw2326 / think-request-crypto

hlw2326

Multi-driver HTTP request signature verification, RSA context encryption and decryption library for ThinkPHP.

Package info

github.com/hlw2326/think-request-crypto

pkg:composer/hlw2326/think-request-crypto

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.1 2026-10-05 08:32 UTC

This package is auto-updated.

Last update: 2026-10-05 10:28:59 UTC


README

Latest Stable Version Total Downloads License

ThinkPHP / PHP 企业级 HTTP 请求加解密、防篡改签名校验与上下文安全解密扩展包(方案1:RSA + AES 工业级混合加密架构,一次一密,极速高并发)。配套前端 @hlw-uni-mp/request。

🌟 核心特性(方案1 混合加密架构)

  • 一次一密(One-Time Key):客户端每次请求动态生成独立的 16 字节随机 AES Key 与 16 字节 IV,彻底消除重放与静态密钥泄露风险。
  • RSA-2048 单块免分段:仅使用服务端 RSA 公钥加密 33 字节的对称密钥对(key:iv),单块加密绝无分段负担,极大降低网络传输体积与加密耗时。
  • AES-128-CBC 极速吞吐:使用高效对称算法加密真实业务载荷(支持多字节 UTF-8 JSON),解密耗时降至微秒级,服务端 CPU 消耗降低 80%~95%,轻松支撑超高 QPS。
  • 双向签名防篡改:采用 SHA256 算法,按业务参数递归 ASCII 字典序排序 + 时间戳 + Nonce + 密钥计算签名,安全防篡改。
  • 动态时钟防重放:毫秒/秒级时间戳比对,内置可配置时钟公差(默认 300 秒),杜绝网络重放攻击。
  • 开箱即用中间件:提供 CryptoMiddleware,支持在全局或特定路由一键校验并注入 $request->clientContext。
  • 全生态闭环:与前端 NPM 生态包 @hlw-uni-mp/request 100% 协议级对称互通。

📦 安装说明

通过 Composer 安装:

composer require hlw2326/think-request-crypto

⚙️ 配置说明

将 config/crypto.php 复制到 ThinkPHP 项目的 config/crypto.php:

return [
    // 是否启用加解密与签名验证
    'enabled'     => (bool) (env('CRYPTO_ENABLED', true)),

    // 签名密钥 (用于校验 X-Client-Sign 防篡改)
    'secret'      => (string) (env('CRYPTO_SIGN_SECRET') ?: env('CRYPTO_SECRET', '')),

    // 请求时钟最大容忍偏差秒数 (防重放攻击,默认 300 秒)
    'expire'      => (int) (env('CRYPTO_EXPIRE', 300)),

    // 服务端 RSA-2048 私钥 (用于解密 X-Client-Context 中的设备与 Token)
    'private_key' => (string) env('RSA_PRIVATE_KEY', ''),

    // 服务端 RSA-2048 公钥 (用于加密数据)
    'public_key'  => (string) env('RSA_PUBLIC_KEY', ''),
];

或在 .env 环境变量中直接指定:

CRYPTO_ENABLED=true
CRYPTO_SIGN_SECRET=your_signature_secret
CRYPTO_EXPIRE=300
RSA_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----"
RSA_PUBLIC_KEY="-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----"

🚀 快速上手

1. 业务控制器静态调用

use Hlw\Crypto\Crypto;

// 1. 校验当前请求合法性并解密上下文
[$ok, $message, $context] = Crypto::verify($this->request);

if (!$ok) {
    return json(['code' => 0, 'msg' => $message], 401);
}

// 2. 获取客户端解密后的设备信息与登录 Token
$token = (string) ($this->request->header('token', '') ?: ($context['token'] ?? ''));

2. 使用中间件(一键全局校验)

在 ThinkPHP app/middleware.php 或特定应用/路由中注册:

return [
    \Hlw\Crypto\middleware\CryptoMiddleware::class,
];

🤝 配套前端

前端 Uni-app / Vue 项目请配套安装:

pnpm add @hlw-uni-mp/request

📄 开源协议

本项目基于 MIT License 开源。