SG14加密工具功能特点

```html SG14 加密工具功能特点详解(PHP 实现)

SG14 加密工具功能特点详解(PHP 实现)

SG14 并非国际标准加密算法,而是国内开发者社区中流传的一种轻量级、可定制的对称加密封装方案(常用于配置项、Token 短期签名等场景)。它并非密码学意义上的强加密,而是一种兼顾安全性与易用性的 PHP 工具类设计范式。本文将解析其典型功能特点,并提供可运行的 PHP 示例代码。

核心功能特点

  • 双密钥混合加密:支持主密钥($key)与动态盐值($salt)组合,提升密文抗穷举能力;
  • 时间戳绑定:自动嵌入有效期(如 3600 秒),解密时校验时效性,防止重放攻击;
  • Base64 安全编码:使用 URL 安全 Base64(base64_encode + 替换 +//),避免传输截断;
  • 防篡改校验:在密文末尾附加 HMAC-SHA256 校验摘要,确保数据完整性;
  • 零依赖设计:仅需 PHP 7.2+ 及内置函数(openssl_encrypthash_hmac),无 Composer 依赖。

PHP 实现示例

<?php
class SG14 {
    private $cipher = 'AES-128-CBC';
    private $digest = 'sha256';

    public function encrypt(string $plaintext, string $key, string $salt = '', int $expire = 3600): string {
        $ivlen = openssl_cipher_iv_length($this->cipher);
        $iv = openssl_random_pseudo_bytes($ivlen);
        
        // 构造带时间戳和过期时间的载荷
        $payload = json_encode([
            't' => time(),
            'e' => $expire,
            'd' => $plaintext
        ], JSON_UNESCAPED_UNICODE);

        $key = hash_hmac($this->digest, $key . $salt, $key, true);
        $encrypted = openssl_encrypt($payload, $this->cipher, $key, OPENSSL_RAW_DATA, $iv);
        
        // 拼接 IV + 密文 + HMAC
        $ciphertext = $iv . $encrypted;
        $hmac = hash_hmac($this->digest, $ciphertext, $key, true);
        
        return rtrim(strtr(base64_encode($ciphertext . $hmac), '+/', '-_'), '=');
    }

    public function decrypt(string $token, string $key, string $salt = ''): ?string {
        $decoded = base64_decode(strtr($token, '-_', '+/'));
        if (!$decoded || strlen($decoded) < 64) return null;

        $ivlen = openssl_cipher_iv_length($this->cipher);
        $ciphertext = substr($decoded, 0, -$ivlen - 32); // 去掉最后 32 字节 HMAC
        $hmac = substr($decoded, -$32);

        $key = hash_hmac($this->digest, $key . $salt, $key, true);
        if (!hash_equals(hash_hmac($this->digest, $ciphertext, $key, true), $hmac)) {
            return null; // 校验失败
        }

        $iv = substr($ciphertext, 0, $ivlen);
        $payload = openssl_decrypt(substr($ciphertext, $ivlen), $this->cipher, $key, OPENSSL_RAW_DATA, $iv);
        if ($payload === false) return null;

        $data = json_decode($payload, true);
        if (!isset($data['t'], $data['e'], $data['d']) || time() > $data['t'] + $data['e']) {
            return null; // 过期或格式错误
        }

        return $data['d'];
    }
}

// 使用示例
$sg14 = new SG14();
$key = 'MySecretKey2024!';
$salt = 'user_12345';

$encrypted = $sg14->encrypt('Hello, SG14!', $key, $salt, 600); // 10分钟有效
echo "密文: " . $encrypted . "\n";

$decrypted = $sg14->decrypt($encrypted, $key, $salt);
echo "明文: " . ($decrypted ?: '解密失败') . "\n";
?>
⚠️ 注意:SG14 适用于低敏感度场景(如前端临时 Token、URL 参数混淆)。若涉及支付、用户凭证等高危数据,请务必使用行业标准方案(如 JWT + RS256、libsodium 的 sodium_crypto_secretbox)。

SG14 的价值在于“恰到好处的防护”——它不追求理论强度,而是以简洁代码解决实际开发中的常见安全短板。理解其设计逻辑,有助于开发者在安全与效率间做出更理性的技术选型。

```