php OpenSSL 介绍
封面图
•
2025-12-23
•
PHP
215
0
0
0
PHP 中的 **OpenSSL** 是一个用于处理加密和安全通信的扩展库,它基于 [OpenSSL](https://www.openssl.org/) 项目。OpenSSL 提供了丰富的加密功能,包括但不限于: - 对称加密(如 AES) - 非对称加密(如 RSA、DSA、ECC) - 数字签名 - SSL/TLS 协议支持 - 证书管理(生成、解析、验证) 在 PHP 中,你可以使用 `openssl_*` 系列函数来调用 OpenSSL 的功能。 --- ## 🔐 一、OpenSSL 常见用途 1. **数据加密与解密** - 使用 AES、DES 等对称算法进行数据加密。 - 使用 RSA 进行非对称加密。 2. **数字签名** - 使用私钥对数据进行签名,公钥验证签名。 3. **SSL/TLS 客户端/服务端通信** - 实现 HTTPS 请求、安全连接等。 4. **证书操作** - 生成自签名证书 - 解析 X509 证书 - 验证证书有效性 --- ## 🧰 二、常用 PHP OpenSSL 函数 ### 1. 加密 & 解密 ```php // 对称加密(AES) $data = "Hello, World!"; $key = openssl_random_pseudo_bytes(32); // 256-bit key $iv = openssl_random_pseudo_bytes(16); // IV for AES-256-CBC $encrypted = openssl_encrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv); $decrypted = openssl_decrypt($encrypted, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv); ``` ### 2. 非对称加密(RSA) ```php // 生成 RSA 密钥对 $privateKey = openssl_pkey_new([ 'private_key_bits' => 2048, 'private_key_type' => OPENSSL_KEYTYPE_RSA, ]); // 获取私钥和公钥 openssl_pkey_export($privateKey, $privateKeyPEM); $publicKey = openssl_pkey_get_public($privateKey); openssl_pkey_export($publicKey, $publicKeyPEM); // 加密 openssl_private_encrypt($data, $encrypted, $privateKey); // 解密 openssl_public_encrypt($encrypted, $decrypted, $publicKey); ``` ### 3. 数字签名 ```php openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA256); openssl_verify($data, $signature, $publicKey, OPENSSL_ALGO_SHA256); ``` ### 4. 证书操作 ```php // 生成自签名证书 $dn = [ 'countryName' => 'CN', 'stateOrProvinceName' => 'Beijing', 'localityName' => 'Beijing', 'organizationName' => 'MyCompany', 'commonName' => 'localhost' ]; $privKey = openssl_pkey_new(); $cert = openssl_csr_new($dn, $privKey); openssl_csr_sign($cert, null, $privKey, 365, $dn); // 输出 PEM 格式 openssl_x509_export($cert, $certPEM); openssl_pkey_export($privKey, $privKeyPEM); ``` --- ## 📦 三、安装 OpenSSL 扩展 在 PHP 中使用 OpenSSL 功能需要确保 `openssl` 扩展已启用。 ### 检查是否启用 ```bash php -m | grep openssl ``` ### 启用方法(Linux) 编辑 `php.ini` 文件,取消注释以下行: ```ini extension=openssl.so ``` 然后重启 Web 服务器(如 Apache 或 Nginx)。 --- ## ⚠️ 四、注意事项 1. **安全性**:避免硬编码密钥或证书信息,建议使用环境变量或配置文件管理。 2. **IV 和盐值**:对称加密中必须使用唯一的 IV,避免重复使用。 3. **错误处理**:使用 `openssl_error_string()` 查看错误信息。 --- ## 📘 五、参考文档 - [PHP 官方文档 - OpenSSL](https://www.php.net/manual/en/book.openssl.php) - [OpenSSL 官方网站](https://www.openssl.org/) --- 如果你有具体的使用场景(比如加密、签名、HTTPS 请求等),可以告诉我,我可以提供更详细的代码示例!
上一篇:
php GPIO 中文介绍
下一篇:
php 如何实现字符串翻转?
标题录入,一次不能超过6条
留言
评论