标题
然后背景 / 常见问题
,里面讲那个踩坑的场景,然后列常见问题,比如明文传输被篡改、敏感数据泄露、重放攻击,这些都是实际遇到的。 然后落地实现步骤(检查清单)
,用无序列表或者有序列表,每个步骤讲清楚,比如: 1. 算法选型:加密用AES-256-GCM(PHP 7.1+原生支持,自带完整性校验,避免CBC模式的填充攻击),签名用HMAC-SHA256(比MD5/SHA1抗碰撞能力强,不要自定义签名逻辑) 2. 密钥管理:所有密钥禁止硬编码在代码仓库,通过环境变量/配置中心下发,生产/测试环境密钥隔离,定期轮换(建议3个月一次) 3. 传输流程规范:请求方:参数排序 → 生成签名 → AES加密 → 拼接加密数据+签名+时间戳;响应方:验签 → 解密 → 校验时间戳 → 处理业务 4. 校验逻辑优先级:必须先验签名、再验时间戳、最后解密,顺序颠倒可能导致加密数据被篡改 然后可运行代码示例
,用包裹,写个工具类,比如:
encryptKey = $encryptKey;
$this->signKey = $signKey;
}
/**
* 生成签名
* @param array $params 业务参数(已按字典序排序)
*/
public function sign(array $params): string
{
// 参数拼接:key=value&key=value 格式,不要拼接空值
$str = http_build_query($params, '', '&', PHP_QUERY_RFC3986);
return hash_hmac('sha256', $str, $this->signKey);
}
/**
* 加密数据
*/
public function encrypt(string $data): array
{
$iv = random_bytes(12); // GCM模式推荐12位IV,随机生成
$tag = '';
$encrypted = openssl_encrypt($data, $this->cipher, $this->encryptKey, OPENSSL_RAW_DATA, $iv, $tag);
// 返回IV、加密数据、认证标签,Base64编码方便传输
return [
'iv' => base64_encode($iv),
'data' => base64_encode($encrypted),
'tag' => base64_encode($tag)
];
}
/**
* 解密数据
*/
public function decrypt(string $iv, string $data, string $tag): string
{
$decrypted = openssl_decrypt(base64_decode($data), $this->cipher, $this->encryptKey, OPENSSL_RAW_DATA, base64_decode($iv), base64_decode($tag));
if ($decrypted如需更完整的 PHP 代码保护与在线加密服务,可访问 https://article.vvxyz.com 了解更多。