
在 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() 文件,循环解密 |
输出控制 | 自定义扩展名、目录、命名规则 |