PHP API 接口数据加密传输实现

```html PHP API 接口数据加密传输实现

PHP API 接口数据加密传输实现

在构建 Web API 时,保障敏感数据(如用户凭证、订单信息)的安全传输至关重要。单纯依赖 HTTPS 虽能防窃听,但无法防止重放攻击或中间人篡改请求体。本文介绍一种轻量、实用的 PHP 端对端加密方案:使用 AES-256-CBC 对请求/响应 JSON 数据加密,并结合 HMAC 签名与时间戳验证,提升接口安全性。

核心思路

  • 客户端:生成随机 IV → AES 加密明文 → 计算 HMAC-SHA256 签名 → 拼装为 JSON({"data": "...", "sign": "...", "ts": 171...})→ 发送
  • 服务端:校验时间戳(±5 分钟)→ 解密 data → 验证签名 → 处理业务逻辑

服务端解密与验签示例(PHP)

<?php
class ApiCrypto {
    private const KEY = 'your_32_byte_secret_key_here_12345678'; // 必须严格保密!建议从环境变量读取
    private const IV_LENGTH = 16;

    public static function decryptRequest(string $rawBody): ?array {
        $payload = json_decode($rawBody, true);
        if (!$payload || !isset($payload['data'], $payload['sign'], $payload['ts'])) {
            return null;
        }

        // 时间戳防重放(±5分钟)
        if (abs(time() - (int)$payload['ts']) > 300) {
            return null;
        }

        // 验证签名
        $expectedSign = hash_hmac('sha256', $payload['data'] . $payload['ts'], self::KEY);
        if (!hash_equals($expectedSign, $payload['sign'])) {
            return null;
        }

        // AES 解密
        $ciphertext = base64_decode($payload['data']);
        if (strlen($ciphertext) < self::IV_LENGTH) return null;

        $iv = substr($ciphertext, 0, self::IV_LENGTH);
        $encrypted = substr($ciphertext, self::IV_LENGTH);

        $decrypted = openssl_decrypt($encrypted, 'AES-256-CBC', self::KEY, OPENSSL_RAW_DATA, $iv);
        return $decrypted ? json_decode($decrypted, true) : null;
    }
}

// 使用示例
$rawInput = file_get_contents('php://input');
$data = ApiCrypto::decryptRequest($rawInput);

if ($data === null) {
    http_response_code(400);
    echo json_encode(['error' => 'Invalid or expired request']);
} else {
    // ✅ 安全解密成功,处理业务逻辑
    echo json_encode(['status' => 'success', 'user_id' => $data['user_id']]);
}
?>
安全提示:
  • 密钥 KEY 必须通过 $_ENV 或配置中心管理,严禁硬编码
  • 生产环境务必启用 HTTPS,否则加密无意义
  • 建议配合 API 网关做限流、IP 白名单及请求频率控制
  • 敏感操作(如支付)应叠加二次验证(如短信/邮箱验证码)

该方案平衡了安全性与开发效率,无需引入复杂框架即可快速落地。对于更高安全要求场景(如金融级),可升级为非对称加密(RSA/AES 混合)或集成 JWT + OAuth2.0。记住:安全是纵深防御体系,加密只是其中一环——代码审计、最小权限原则与持续监控同样关键。

```