PHP 对称加密与非对称加密应用场景

```html PHP 对称加密与非对称加密应用场景

PHP 对称加密与非对称加密应用场景

在 Web 开发中,数据安全至关重要。PHP 提供了丰富的加密扩展(如 opensslsodium),支持对称与非对称加密。二者适用场景不同,混用不当反而引入风险。

✅ 对称加密:高效传输敏感数据

特点:加解密使用同一密钥,速度快,适合大量数据加密。
典型场景:用户密码重置 Token、API 请求体加密、数据库字段脱敏。

推荐使用现代、认证的 AEAD 模式(如 chacha20-poly1305)或 AES-GCM:

<?php
// 使用 OpenSSL AES-256-GCM(PHP 7.1+)
function encryptAes($plaintext, $key) {
    $iv = random_bytes(12); // GCM 推荐 12 字节 IV
    $cipher = 'aes-256-gcm';
    $tag = '';
    $ciphertext = openssl_encrypt(
        $plaintext, $cipher, $key, OPENSSL_RAW_DATA, $iv, $tag, '', 16
    );
    return base64_encode($iv . $tag . $ciphertext);
}

function decryptAes($encoded, $key) {
    $data = base64_decode($encoded);
    $iv = substr($data, 0, 12);
    $tag = substr($data, 12, 16);
    $ciphertext = substr($data, 28);
    $cipher = 'aes-256-gcm';
    return openssl_decrypt($ciphertext, $cipher, $key, OPENSSL_RAW_DATA, $iv, $tag);
}

$key = hash('sha256', 'my-secret-salt', true); // 32 字节密钥
$token = encryptAes('user_id=123&exp=1735689000', $key);
echo "加密 Token: $token\n";
echo "解密结果: " . decryptAes($token, $key) . "\n";
?>

✅ 非对称加密:安全交换密钥与数字签名

特点:公钥加密、私钥解密(或反之),速度慢,不适用于大数据。
典型场景:JWT 签名验证、API 身份认证、安全传输对称密钥。

示例:用 RSA 签名验证请求完整性(替代简单哈希):

<?php
// 生成密钥对(生产环境请用 openssl_pkey_new() 或预生成)
$privateKey = <<
⚠️ 安全提醒: • 对称密钥必须严格保密,禁止硬编码;建议使用环境变量 + 密钥管理服务(如 AWS KMS)。 • 非对称加密仅用于签名/验签或加密小量数据(如 AES 密钥);大文本请先用对称加密,再用 RSA 加密该密钥。 • 始终优先选用 sodium_crypto_secretbox()(PHP 7.2+)替代自实现 AES —— 它自动处理 nonce、认证与防侧信道攻击。

理解“什么场景用什么加密”,比掌握算法本身更重要。安全不是功能,而是贯穿设计、开发与运维的持续实践。

```
标签: PHP 加密 数据安全 加密服务 PHP 开发 PHP 对称加密与非对称加密应用场景
← 返回文章列表