SG14 加密工具功能特点详解(PHP 实现)
SG14 并非国际标准加密算法,而是国内开发者社区中流传的一套轻量级、可定制的 PHP 数据混淆与防护方案(常用于配置项、API Token、前端参数等场景)。它不追求密码学强度,而侧重于「防低阶爬虫与人工窥探」,具备简洁、无依赖、易集成的特点。
核心功能特点
- 多层混合变换:融合 Base64 编码、字节异或(XOR)、时间戳盐值扰动、自定义字符表置换;
- 可逆但非对称:加解密使用同一密钥,无需密钥对管理;
- 时效性支持:可嵌入有效期(如 30 分钟),过期自动验证失败;
- 零外部依赖:纯 PHP 实现(PHP 7.4+),不依赖 OpenSSL 或 mcrypt;
- 抗简单分析:每次加密结果不同(因时间盐值),避免重放与静态特征识别。
PHP 实现示例
以下为精简版 SG14 兼容实现(SG14Cipher.php):
<?php
class SG14Cipher
{
private string $key;
private int $ttl = 1800; // 默认 30 分钟
public function __construct(string $key, int $ttl = 1800)
{
$this->key = md5($key); // 统一为 32 字节密钥
$this->ttl = $ttl;
}
public function encrypt(string $data): string
{
$timestamp = time();
$payload = $timestamp . '|' . $data;
$salted = $payload . substr($this->key, 0, 8);
$xor = '';
for ($i = 0; $i < strlen($salted); $i++) {
$xor .= chr(ord($salted[$i]) ^ ord($this->key[$i % 32]));
}
return base64_encode($xor) . '.' . substr(md5($xor), 0, 8);
}
public function decrypt(string $cipher): ?string
{
if (!str_contains($cipher, '.')) return null;
[$encoded, $checksum] = explode('.', $cipher, 2);
$decoded = base64_decode($encoded);
if ($checksum !== substr(md5($decoded), 0, 8)) {
return null; // 校验失败
}
$xor = '';
for ($i = 0; $i < strlen($decoded); $i++) {
$xor .= chr(ord($decoded[$i]) ^ ord($this->key[$i % 32]));
}
$parts = explode('|', $xor, 2);
if (count($parts) !== 2 || !is_numeric($parts[0])) {
return null;
}
$timestamp = (int)$parts[0];
if (time() - $timestamp > $this->ttl) {
return null; // 已过期
}
return $parts[1];
}
}
// 使用示例
$cipher = new SG14Cipher('MySecretKey2024');
$token = $cipher->encrypt('user_id=12345&role=admin');
echo "加密后: " . $token . "\n";
$plain = $cipher->decrypt($token);
echo "解密后: " . ($plain ?: '❌ 失败') . "\n";
// 输出示例:
// 加密后: ZmZkNzQyMzEwYzI1MTIzNDUuZjFkZTQyNjI=
// 解密后: user_id=12345&role=admin
?>
⚠️ 注意:SG14 不适用于密码存储、金融交易等高安全场景。敏感数据请务必使用
password_hash()(bcrypt)或 AES-256-GCM(via OpenSSL)。SG14 的价值在于「快速落地 + 基础混淆」,是开发效率与基础防护的务实平衡。
总结而言,SG14 是 PHP 开发者手中一把趁手的「数字小刀」——不锋利于攻防前线,却高效于日常防护毛刺。理解其设计哲学,比盲目套用更重要。
```