PHP中的ZipArchive類用於創建和操作ZIP壓縮文件。雖然ZipArchive自身不直接支持加密功能,但結合openssl擴展,我們可以實現對壓縮包的加密和解密處理,提昇文件安全性。
確保PHP環境已啟用ZipArchive和openssl擴展,可在php.ini中開啟extension=zip和extension=openssl 。
首先使用ZipArchive創建ZIP文件,將目標文件添加進壓縮包。隨後通過openssl的加密函數對壓縮文件內容進行加密。示例代碼如下:
<?php
$zip = new ZipArchive();
$zipname = 'encrypted.zip';
if ($zip->open($zipname, ZipArchive::CREATE) === TRUE) {
// 添加文件
$zip->addFile('data.txt', 'data.txt');
$zip->close();
// 讀取壓縮包數據並加密
$zipdata = file_get_contents($zipname);
$encryptedzip = openssl_encrypt($zipdata, 'AES-128-CBC', 'password', OPENSSL_RAW_DATA, '1234567890123456');
file_put_contents($zipname, $encryptedzip);
echo '壓縮包已加密。';
} else {
echo '創建壓縮包失敗。';
}
?>
以上示例中採用AES-128-CBC算法,密碼為password ,初始化向量為1234567890123456 。你可以根據需要調整加密算法和密鑰。
解密時使用openssl的解密函數恢復壓縮包數據,然後利用ZipArchive解壓縮。示例代碼如下:
<?php
$zipname = 'encrypted.zip';
// 讀取加密的壓縮包內容
$encryptedzip = file_get_contents($zipname);
// 解密
$decryptedzip = openssl_decrypt($encryptedzip, 'AES-128-CBC', 'password', OPENSSL_RAW_DATA, '1234567890123456');
file_put_contents($zipname, $decryptedzip);
// 打開解密後的壓縮包並解壓
$zip = new ZipArchive();
if ($zip->open($zipname) === TRUE) {
$zip->extractTo('unzip/');
$zip->close();
echo '壓縮包已解密並解壓縮。';
} else {
echo '打開壓縮包失敗。';
}
?>
解密步驟中使用了與加密時相同的算法和密鑰,確保數據正確恢復。
通過結合PHP的ZipArchive類與openssl擴展,可以有效實現ZIP文件的加密與解密,增強文件在傳輸和存儲過程中的安全保障。希望本文的示例和說明對你在項目中應用此功能有所幫助。