[英]How to check if encrypted Zip archive in PHP?
據我了解,狀態是存檔加密包含在通用位標志中。 我嘗試使用 ZipArchive::statname() 進行檢查,但似乎無法通過此方法獲取信息。
我還能做什么? 閱讀檔案並解析標題? 我知道我可以調用 system(),但我不想使用這種方法,因為它的特殊性(某些托管此功能已禁用)。
ZIP 文件頭:(加密文件與普通文件)
09
好像是加密標志。
檢查第 7 個字節是0x09
function zip_is_encrypted($filename) {
$handle = fopen($filename, "rb");
$contents = fread($handle, 7);
fclose($handle);
return $contents[6] == 0x09;
}
這是 ZIP 標准: http : //www.pkware.com/documents/casestudies/APPNOTE.TXT 。
來自第 4.3.7 節:
4.3.7 Local file header:
local file header signature 4 bytes (0x04034b50)
version needed to extract 2 bytes
general purpose bit flag 2 bytes
compression method 2 bytes
...
從第 4.4.4 節:
4.4.4 general purpose bit flag: (2 bytes)
Bit 0: If set, indicates that the file is encrypted.
...
所以你需要檢查第七個字節的FIRST BIT而不是整個字節。 您必須對每個文件進行檢查,因為每個文件都可以單獨加密(第 4.3.6 節)。
這是行不通的,因為 Header 可以重復 n 次。
要解決此問題,請打開 zip zip_open() 並嘗試讀取每個條目 zip_entry_open()
如果存在不可讀的條目,則 zip 可能被加密!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.