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 = '-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD...';
$publicKey = '-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu...';

// 签名(服务端)
$data = json_encode(['order_id' => 'ORD-2024-789', 'amount' => 99.9]);
$signature = '';
openssl_sign($data, $signature, $privateKey, 'sha256WithRSAEncryption');
$signatureB64 = base64_encode($signature);

// 验证(接收方)
$isValid = openssl_verify($data, base64_decode($signatureB64), $publicKey, 'sha256WithRSAEncryption');
var_dump($isValid === 1); // true 表示签名有效
?>
⚠️ 安全提示:
• 对称密钥需安全存储(如环境变量或密钥管理服务),切勿硬编码;
• 非对称加密仅用于小数据(≤245 字节 RSA-2048),大内容应先哈希或结合对称加密(混合加密);
• 优先选用 sodium_crypto_secretbox()(libsodium)替代 OpenSSL 手动实现,更难出错。

理解加密边界,才能构建真正可信的安全链路——对称加密护航数据“体”,非对称加密守护身份与信任“魂”。

```