php openssl_decrypt() 代替 mcrypt_module_open() 方法
封面图
•
2025-10-15
•
PHP
174
0
0
0
在 PHP 中,`mcrypt_module_open()` 是用于加密库 `mcrypt` 的函数,但 `mcrypt` 扩展自 PHP 7.1 起已被弃用,并在 PHP 7.2 中被移除。因此,推荐使用 OpenSSL 扩展来替代 `mcrypt`。 如果你正在使用 `openssl_decrypt()` 来替代 `mcrypt_module_open()` 的功能,需要了解以下几点: --- ## 🔍 1. `mcrypt_module_open()` 的作用 `mcrypt_module_open()` 是用来打开一个加密模块(如 AES、DES 等),并返回一个资源句柄,用于后续的加密和解密操作(如 `mcrypt_encrypt()` 和 `mcrypt_decrypt()`)。 --- ## ✅ 2. 替代方案:使用 `openssl_decrypt()` OpenSSL 提供了更现代、安全的加密方式,支持多种算法(如 AES、DES、3DES 等)。下面是使用 OpenSSL 实现类似 `mcrypt_decrypt()` 功能的示例。 ### 示例:AES-128-CBC 加密与解密 #### 加密(使用 `openssl_encrypt()`) ```php $data = "Hello, world!"; $key = "1234567890123456"; // 16 字节 (AES-128) $iv = "1234567890123456"; // 16 字节 (IV) $encrypted = openssl_encrypt($data, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv); echo base64_encode($encrypted); // 输出加密后的数据 ``` #### 解密(使用 `openssl_decrypt()`) ```php $encryptedData = base64_decode("..."); // 从上面加密得到的值 $key = "1234567890123456"; $iv = "1234567890123456"; $decrypted = openssl_decrypt($encryptedData, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv); echo $decrypted; // 输出 "Hello, world!" ``` --- ## ⚠️ 注意事项 - **Key 和 IV 长度**:必须符合所选算法的要求(例如 AES-128 需要 16 字节的 key 和 IV)。 - **模式匹配**:确保加密和解密时使用的算法和模式一致(如 AES-128-CBC)。 - **编码处理**:`openssl_encrypt()` 默认返回二进制数据,通常需要用 `base64_encode()` 编码存储或传输,解密时再用 `base64_decode()` 处理。 --- ## 🧠 3. 如果你之前使用的是 `mcrypt` 的某些特性 | mcrypt 功能 | OpenSSL 对应方法 | |-------------|------------------| | `mcrypt_module_open()` | 无需直接调用,直接使用 `openssl_encrypt()`/`openssl_decrypt()` | | `mcrypt_encrypt()` / `mcrypt_decrypt()` | `openssl_encrypt()` / `openssl_decrypt()` | | `mcrypt_get_iv_size()` | 使用 `openssl_cipher_iv_length('AES-128-CBC')` 获取 IV 长度 | | `mcrypt_get_key_size()` | 使用 `openssl_cipher_key_length('AES-128-CBC')` 获取 key 长度 | --- ## ✅ 总结 | 方法 | 用途 | 推荐方式 | |------|------|----------| | `mcrypt_module_open()` | 打开加密模块 | **不推荐**,已废弃 | | `openssl_encrypt()` | 加密数据 | ✅ 推荐 | | `openssl_decrypt()` | 解密数据 | ✅ 推荐 | --- 如果你有具体的 `mcrypt` 代码片段,我可以帮你将其转换为 OpenSSL 版本。欢迎提供代码!
上一篇:
使用PhpSpreadsheet导入和导出Excel
下一篇:
PHP 判断是否为 AJAX 请求
标题录入,一次不能超过6条
留言
评论