PHP OpenSSL 加密解密完整教程

```html PHP OpenSSL 加密解密完整教程

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 使用公钥加密、私钥解密,适合小数据(如加密 AES 密钥):

<?php
// 生成 RSA 密钥对(生产环境请用 openssl_pkey_new() + 文件持久化)
$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'];

$message = "RSA 加密测试";

// 公钥加密
openssl_public_encrypt($message, $encrypted, $publicKey);
$encodedEnc = base64_encode($encrypted);

// 私钥解密
openssl_private_decrypt(base64_decode($encodedEnc), $decrypted, $privateKey);

echo "原文:{$message}\n";
echo "密文(base64):{$encodedEnc}\n";
echo "解密后:{$decrypted}\n";
?>

💡 最佳实践建议

  • ✅ 敏感数据加密首选 AES-256-CBC 或更现代的 AES-256-GCM(支持认证加密)
  • ✅ 密钥管理:使用 openssl_random_pseudo_bytes() 生成真随机密钥,切勿硬编码
  • ✅ 生产环境 RSA 密钥应持久化到文件,并设置严格权限(chmod 600
  • ❌ 避免使用已废弃的 mcrypt 扩展(PHP 7.2+ 已移除)

掌握 OpenSSL,你就能在用户密码保护、API 数据签名、JWT 实现等场景中构建坚实的安全防线。安全无小事,加密需严谨 —— 每一次 openssl_encrypt(),都是对数据尊严的守护。

```