hlw2326 / think-request-crypto
Multi-driver HTTP request signature verification, RSA context encryption and decryption library for ThinkPHP.
v1.0.1
2026-10-05 08:32 UTC
Requires
- php: >=8.1
- ext-json: *
- ext-openssl: *
Requires (Dev)
None
Suggests
- topthink/framework: Required for ThinkPHP request and middleware integration (^6.0|^8.0).
Provides
None
Conflicts
None
Replaces
None
README
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/request100% 协议级对称互通。
📦 安装说明
通过 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 开源。