答案是PHP加密解密失败通常因OpenSSL未启用、参数不一致或IV处理不当。需检查openssl扩展是否开启,确保加密算法、密钥、IV、选项两端完全一致,并正确传递IV,同时保证数据编码为UTF-8,即可解决。
PHP中调用数据加密解密函数无效,通常不是函数本身的问题,而是配置、参数或环境使用不当导致。OpenSSL扩展未启用、密钥不匹配、加密模式和填充方式设置错误是最常见的原因。下面从排查思路到解决方案,结合OpenSSL的实际用法,帮你快速定位并解决问题。
PHP的加密功能依赖OpenSSL扩展。如果该扩展未安装或未启用,所有相关函数都会失效。
使用openssl_encrypt()和openssl_decrypt()时,加密与解密必须使用相同的参数,否则返回false或乱码。
关键参数包括:
示例代码:
$method = 'AES-256-CBC';
$key = 'your-32-byte-secret-key-here!!!'; // 256位 = 32字节
$iv = openssl_random_pseudo_bytes(16); // 128位IV
$encrypted = openssl_encrypt('Hello World', $method, $key, 0, $iv);
$decrypted = openssl_decrypt($encrypted, $method, $key, 0, $iv);
echo $decrypted; // 应输出 Hello World
常见错误是每次加密生成新的IV,但解密时无法获取原始IV。IV不需要保密,但必须保存或传递给解密端。
明文包含中文时,需确保字符串编码统一为UTF-8。
当解密失败时,可逐行打印中间值辅助排查: