0

私が理解しているように、ステータスは汎用ビットフラグを含むアーカイブ暗号化です。これを ZipArchive::statname() で確認してみるのですが、この方法では情報を取得できないようです。

他に何ができますか?アーカイブを読んでヘッダーを解析しますか? system() を呼び出すことができることはわかっていますが、その特異性のためにこのメソッドを使用したくありません (この関数をホストしている一部は無効になっています)。

4

3 に答える 3

5

ZIPファイルヘッダー:(暗号化されたファイルと通常のファイル)

ここに画像の説明を入力してください

09暗号化フラグのようです。

7番目のバイトが0x09

function zip_is_encrypted($filename) {
  $handle = fopen($filename, "rb");
  $contents = fread($handle, 7);
  fclose($handle);
  return $contents[6] == 0x09;
}
于 2012-08-22T21:53:47.717 に答える
4

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.
    ...

したがって、バイト全体ではなく、7 番目のバイトの FIRST BIT をチェックする必要があります。各ファイルは個別に暗号化できるため、各ファイルのチェックを行う必要があります (セクション 4.3.6)。

于 2013-11-19T10:36:40.250 に答える