SG14 加密工具功能特点详解(PHP 实现)
SG14 并非国际标准加密算法,而是国内开发者社区中流传的一种轻量级、可定制的对称加密封装方案(常用于配置项、Token 短期签名等场景)。它并非密码学意义上的强加密,而是一种兼顾安全性与易用性的 PHP 工具类设计范式。本文将解析其典型功能特点,并提供可运行的 PHP 示例代码。
核心功能特点
- 双密钥混合加密:支持主密钥(
$key)与动态盐值($salt)组合,提升密文抗穷举能力; - 时间戳绑定:自动嵌入有效期(如 3600 秒),解密时校验时效性,防止重放攻击;
- Base64 安全编码:使用 URL 安全 Base64(
base64_encode+ 替换+//),避免传输截断; - 防篡改校验:在密文末尾附加 HMAC-SHA256 校验摘要,确保数据完整性;
- 零依赖设计:仅需 PHP 7.2+ 及内置函数(
openssl_encrypt、hash_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 的价值在于“恰到好处的防护”——它不追求理论强度,而是以简洁代码解决实际开发中的常见安全短板。理解其设计逻辑,有助于开发者在安全与效率间做出更理性的技术选型。
```