在 PHP 中实现文件批量解密功能,常用于自动处理加密存档、配置文件、安全备份等。你可以基于对称加密算法(如 AES)实现高效、可控的批量解密。

下面是完整的 PHP 文件批量解密实现教程 👇


🧠 一、前提条件

假设你有一批被加密的文件,如:

/encrypted_files/
    ├── file1.enc
    ├── file2.enc
    ├── file3.enc

每个文件都是使用相同的加密密钥进行加密的(如 AES-256-CBC)。


✅ 二、准备加密参数

define('SECRET_KEY', 'your-32-character-secret-key'); // 32 字节 AES-256 密钥
define('IV', 'your-16-byte-iv123'); // 16 字节的初始向量 IV
define('CIPHER', 'AES-256-CBC');

🔐 三、解密单个文件的函数

function decryptFile($inputPath, $outputPath) {
    $encryptedData = file_get_contents($inputPath);
    $decryptedData = openssl_decrypt(
        $encryptedData,
        CIPHER,
        SECRET_KEY,
        OPENSSL_RAW_DATA,
        IV
    );

    if ($decryptedData === false) {
        echo "解密失败:$inputPath\n";
        return false;
    }

    file_put_contents($outputPath, $decryptedData);
    echo "解密成功:$outputPath\n";
    return true;
}

🔄 四、批量解密目录中的所有文件

function batchDecrypt($inputDir, $outputDir) {
    if (!is_dir($inputDir)) return;

    if (!file_exists($outputDir)) {
        mkdir($outputDir, 0777, true);
    }

    $files = glob($inputDir . '/*.enc');

    foreach ($files as $filePath) {
        $fileName = basename($filePath, '.enc');
        $outputPath = $outputDir . '/' . $fileName;
        decryptFile($filePath, $outputPath);
    }
}

📦 五、调用示例

$inputDir = __DIR__ . '/encrypted_files';
$outputDir = __DIR__ . '/decrypted_files';

batchDecrypt($inputDir, $outputDir);

🛡️ 六、安全提示

安全点建议说明
密钥/IV 存储不要硬编码在代码里,建议放入 .env 或配置文件
文件校验可加入哈希验证,确保解密内容完整
加密一致性加密算法、填充方式、IV 必须和加密时保持一致
文件权限控制限制加密/解密文件夹访问权限

🔍 七、可选:对 .txt/.json/.log 文件做自动判断输出后缀

$outputPath = $outputDir . '/' . $fileName . '.txt'; // 添加新扩展名

🧩 八、扩展功能建议

  • 支持子目录递归解密
  • 日志记录解密成功/失败文件
  • CLI 参数方式运行(如:php decrypt.php path/to/dir
  • Web 后台支持上传+批量解密处理

🎯 总结

步骤实现关键
加密算法使用 openssl_decrypt,确保 AES 参数正确
解密函数读取 -> 解密 -> 写入
批处理遍历 glob() 文件,循环解密
输出控制自定义扩展名、目录、命名规则