PHP OpenSSL 加密解密完整教程
OpenSSL 是 PHP 内置的工业级加密扩展,支持 AES、RSA 等主流算法,安全可靠且无需额外依赖。本文带你掌握对称加密(AES)与非对称加密(RSA)的核心用法。
✅ 一、AES-256-CBC 对称加密(推荐用于数据加解密)
AES 是最常用的安全对称加密算法,需密钥(key)和初始化向量(IV):
<?php
// 生成安全密钥(32字节 = AES-256)和 IV(16字节)
$key = openssl_random_pseudo_bytes(32); // 或使用 hash('sha256', 'your-secret-passphrase')
$iv = openssl_random_pseudo_bytes(16);
$data = "Hello, 这是一条敏感信息!";
// 加密
$encrypted = openssl_encrypt($data, 'AES-256-CBC', $key, 0, $iv);
$encoded = base64_encode($encrypted); // 转为字符串存储/传输
// 解密
$decrypted = openssl_decrypt(base64_decode($encoded), 'AES-256-CBC', $key, 0, $iv);
echo "原文:{$data}\n";
echo "密文(base64):{$encoded}\n";
echo "解密后:{$decrypted}\n";
?>
⚠️ 注意:务必安全保存
$key 和 $iv(IV 可随密文一起存储,但 绝不可重复使用同一 IV 加密多条数据)。✅ 二、RSA 非对称加密(推荐用于身份认证、密钥交换)
RSA 使用公钥加密、私钥解密,适合小数据(≤245 字节 for 2048-bit key):
<?php
// 1. 生成密钥对(生产环境请用 openssl 命令行生成并妥善保管)
$config = ['digest_alg' => 'sha256', 'private_key_bits' => 2048];
$res = openssl_pkey_new($config);
openssl_pkey_export($res, $privateKey);
$publicKey = openssl_pkey_get_details($res)['key'];
// 2. 加密(用公钥)
$data = "API Token: abc123";
openssl_public_encrypt($data, $encrypted, $publicKey);
$encoded = base64_encode($encrypted);
// 3. 解密(用私钥)
openssl_private_decrypt(base64_decode($encoded), $decrypted, $privateKey);
echo "RSA 加密成功:{$encoded}\n";
echo "RSA 解密结果:{$decrypted}\n";
?>
💡 最佳实践建议
- ✅ 优先使用
AES-256-CBC或AES-256-GCM(支持认证加密)处理大量数据; - ✅ RSA 仅用于加密 AES 密钥或签名验证,避免直接加密长文本;
- ✅ 始终检查
openssl_encrypt()返回值是否为false(失败时抛异常); - ✅ 生产环境密钥应通过环境变量或密钥管理服务(如 Vault)注入,禁止硬编码。
掌握 OpenSSL 是构建安全 PHP 应用的基石。从今天起,告别 md5() 和自制加密函数,拥抱标准、可审计、经得起考验的加密方案。