SG15加密工具使用指南(PHP 实战篇)
SG15 是一款轻量级、国产开源的对称加密工具库,专为 PHP 8.0+ 设计,采用 AES-256-GCM 模式实现高性能加解密,具备认证加密(AEAD)能力,可有效防止篡改与重放攻击。本文将带你快速上手 SG15 的核心用法。
1. 安装与初始化
通过 Composer 安装(推荐):
composer require sg15/sg15
初始化加密器(需提供 32 字节密钥):
<?php
use SG15\Encryptor;
// 生成安全密钥(生产环境请存于配置中心或环境变量)
$key = random_bytes(32); // 或 hex2bin('your-32-byte-hex-key');
$encryptor = new Encryptor($key);
?>
2. 基础加解密示例
SG15 默认自动处理 nonce 生成与附加认证数据(AAD),开发者无需手动管理 IV:
<?php
$data = "用户敏感信息:身份证号 110101199003072***";
$ciphertext = $encryptor->encrypt($data);
echo "密文(Base64):" . base64_encode($ciphertext) . "\n";
// 解密
$plaintext = $encryptor->decrypt($ciphertext);
echo "明文:" . $plaintext; // 输出原始数据
?>
3. 高级用法:带认证数据(AAD)
适用于需绑定上下文的场景(如用户ID + 订单号防篡改):
<?php
$aad = ['user_id' => 10086, 'order_sn' => 'ORD20240520001'];
$ciphertext = $encryptor->encrypt($data, $aad);
// 解密时必须传入相同 AAD,否则抛出 AuthenticationException
try {
$plaintext = $encryptor->decrypt($ciphertext, $aad);
} catch (SG15\Exception\AuthenticationException $e) {
throw new Exception("数据已被篡改或 AAD 不匹配");
}
?>
4. 密钥安全建议
⚠️ 重要提醒:
• 切勿硬编码密钥;推荐使用
openssl_random_pseudo_bytes(32) 生成并持久化至安全存储;
• 同一密钥不宜长期使用,建议每季度轮换;
• SG15 不内置密钥管理,可结合 Hashicorp Vault 或 AWS KMS 封装密钥获取逻辑。
SG15 已通过 PHPStan 严格类型检查,并覆盖全部加密边界用例(空字符串、Unicode、超长文本等)。其零依赖、无全局状态的设计,天然适配 Laravel、Symfony 等主流框架。
项目地址:https://github.com/sg15/sg15-php
文档与测试用例均开源可查,欢迎贡献 PR 与 Issue。