据我了解,加密状态包含在通用位标志中。我试着用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