簡體   English   中英

如何檢查 PHP 中是否加密了 Zip 存檔?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM