需先确认统一加密算法、密钥、iv及模式等参数,再编写php脚本遍历文件调用openssl_decrypt等函数批量还原。

如果您拥有多个使用PHP脚本加密的文件,且需要一次性还原原始内容,则可能是由于加密逻辑统一、密钥或算法参数固定。以下是批量解密这些文件的具体操作步骤:
一、确认加密方式与密钥信息
批量解密的前提是明确原始加密所采用的算法(如openssl_encrypt、mcrypt已废弃函数、自定义异或/Base64混淆等)、密钥(key)、向量(IV)、密码模式(如CBC、ECB)及填充方式。缺失任一参数将导致解密失败或乱码。
1、检查加密脚本中是否存在硬编码的$key变量,例如$key = 'my_secret_key_2023';
2、查找是否调用openssl_encrypt函数,并记录其第二个参数(如'AES-128-CBC')和第五个参数($iv)的生成逻辑。
立即学习“PHP免费学习笔记(深入)”;
3、若加密文件头部包含标识(如前16字节为固定魔数或base64编码的IV),需先提取该部分用于每次解密。
二、编写PHP批量解密脚本
通过遍历指定目录下的所有待解密文件,逐个读取、解密并保存为新文件(或覆盖原文件)。脚本需复用与加密时完全一致的参数组合,否则输出不可逆。
1、创建新PHP文件,如decrypt_batch.php,开头声明
2、使用glob()函数匹配目标文件,例如$files = glob('./encrypted/*.enc');
3、对每个$file执行file_get_contents()读取二进制数据,并按加密时相同逻辑分离IV与密文(如substr($data, 0, 16)为IV,substr($data, 16)为密文)。
4、调用openssl_decrypt($ciphertext, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv),确保第三个参数$key与加密时完全一致,严禁使用md5()或sha1()临时处理密钥字符串。
5、将解密结果写入同名非加密后缀文件,例如file_put_contents(str_replace('.enc', '.dec', $file), $plaintext);
三、使用命令行批量调用单文件解密工具
当已有稳定可用的单文件解密脚本(如decrypt_one.php),可通过Shell或CMD循环调用,避免修改主逻辑,适合测试环境或权限受限场景。
1、确认decrypt_one.php接受两个参数:输入文件路径和输出路径,例如php decrypt_one.php input.enc output.txt。
2、在Linux终端中执行:for f in ./encrypted/*.enc; do php decrypt_one.php "$f" "${f%.enc}.dec"; done
3、在Windows CMD中执行:for %i in (encrypted\*.enc) do php decrypt_one.php "%i" "%~ni.dec"
4、必须确保decrypt_one.php中exit()前无echo/print_r等输出,否则重定向会混入解密结果。
四、处理Base64封装的加密内容
部分PHP加密实现先对密文进行base64_encode()再保存,解密时需先base64_decode()还原原始字节流,否则openssl_decrypt将返回false。
1、读取文件内容后,使用$raw = base64_decode(trim(file_get_contents($file)));去除换行并解码。
2、判断解码后长度是否为合法AES块大小倍数(如16、32字节对齐),若不是则说明未正确base64解码或文件损坏。
3、若加密时对IV也做了base64处理,则需分别提取前段base64字符串解码为IV,剩余部分解码为密文。
4、禁止对已base64编码的内容再次调用base64_decode()两次,会导致二进制数据永久损坏。
五、验证解密结果完整性
解密完成后需校验输出是否为有效原始文件,尤其针对图片、JSON、文本等有结构特征的数据类型,防止静默失败。
1、对解密后的.txt文件,检查前100字符是否包含可读UTF-8文本,而非乱码或空字节("\x00")。
2、对.png文件,验证前8字节是否等于\x89\x50\x4E\x47\x0D\x0A\x1A\x0A。
3、对JSON文件,使用json_decode($content, true)并检查json_last_error()是否返回JSON_ERROR_NONE。
4、若某文件解密后json_last_error()返回JSON_ERROR_SYNTAX,应立即停止批量流程并检查该文件对应的密钥或IV是否异常。











