當前位置: 首頁> 最新文章列表> PHP ZipArchive壓縮包加密與解密完整實現教程

PHP ZipArchive壓縮包加密與解密完整實現教程

M66 2025-07-28

PHP ZipArchive與openssl擴展實現壓縮包加密與解密

PHP中的ZipArchive類用於創建和操作ZIP壓縮文件。雖然ZipArchive自身不直接支持加密功能,但結合openssl擴展,我們可以實現對壓縮包的加密和解密處理,提昇文件安全性。

環境準備

確保PHP環境已啟用ZipArchive和openssl擴展,可在php.ini中開啟extension=zipextension=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文件的加密與解密,增強文件在傳輸和存儲過程中的安全保障。希望本文的示例和說明對你在項目中應用此功能有所幫助。