據我瞭解,加密狀態包含在通用位標誌中。我試着用ZipArchive :: statname()來檢查它,但似乎無法通過此方法獲取信息。如何檢查PHP中的加密Zip存檔?
我還能做什麼?閱讀檔案並解析標題?我知道我可以調用system(),但我不想使用此方法,因爲它的特殊性(某些託管此功能被禁用)。
據我瞭解,加密狀態包含在通用位標誌中。我試着用ZipArchive :: statname()來檢查它,但似乎無法通過此方法獲取信息。如何檢查PHP中的加密Zip存檔?
我還能做什麼?閱讀檔案並解析標題?我知道我可以調用system(),但我不想使用此方法,因爲它的特殊性(某些託管此功能被禁用)。
這裏是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.
...
所以你需要檢查第七字節第一位的,而不是整個字節。您必須對每個文件進行檢查,因爲每個文件都可以單獨進行加密(第4.3.6節)。
不錯,我一直懶得學習文檔 – Peter
ZIP文件頭:(加密文件與正常文件)
09
seemts是加密標誌。
檢查第7個字節爲0x09
function zip_is_encrypted($filename) {
$handle = fopen($filename, "rb");
$contents = fread($handle, 7);
fclose($handle);
return $contents[6] == 0x09;
}
+1做出簡單的函數來一些正式文件指定位的引用將是不錯 –
@owlstead [標準](http://www.pkware.com/documents/casestudies/APPNOTE.TXT)。關於加密: '4.4.4通用位標誌:(2個字節) 位0:如果設置,表明@owlstead您需要檢查第七字節第一位的文件被encrypted.' –
。 –
你用ZipArchive :: statname試過了什麼?你有錯誤信息嗎?請給我們更多的信息。 – Frog
ZipArchive打開加密文件,但提供的信息不夠。方法'ZipArchive :: statIndex()'的返回值[示例](http://pastebin.com/ZetmVLKa)。我試圖通過'comp_method'來識別加密的檔案,但沒有發現依賴關係。 – Ticksy
Ticksy我甚至爲你 – Peter