我有幾個zip和rar文件,我正在使用,我試圖分析每個文件是如何壓縮的屬性(壓縮級別,壓縮算法(例如deflate,LZMA,BZip2),字典大小,字大小等等),我還沒有想出一個辦法來做到這一點。如何確定ZIP/RAR文件的壓縮方法
有什麼辦法來分析文件來確定這些屬性,軟件或其他?
乾杯和謝謝!
我有幾個zip和rar文件,我正在使用,我試圖分析每個文件是如何壓縮的屬性(壓縮級別,壓縮算法(例如deflate,LZMA,BZip2),字典大小,字大小等等),我還沒有想出一個辦法來做到這一點。如何確定ZIP/RAR文件的壓縮方法
有什麼辦法來分析文件來確定這些屬性,軟件或其他?
乾杯和謝謝!
我建議hachoir-wx看看這些文件。 How to install a Python package,或者您可以在使用Windows時使用PyPM嘗試ActivePython。如果您已經安裝了必要的hachoir包,你可以做這樣的事情來運行GUI:
蟒蛇C:\ Python27 \腳本\ hachoir-WX
它使您能夠通過瀏覽RAR和ZIP文件的數據字段。一個例子見screenshot。
對於RAR文件,查看位於WinRAR安裝目錄中的technote.txt文件。這給出了RAR規範的詳細信息。您可能會對以下內容感興趣:
HEAD_FLAGS Bit flags: 2 bytes
0x10 - information from previous files is used (solid flag)
bits 7 6 5 (for RAR 2.0 and later)
0 0 0 - dictionary size 64 KB
0 0 1 - dictionary size 128 KB
0 1 0 - dictionary size 256 KB
0 1 1 - dictionary size 512 KB
1 0 0 - dictionary size 1024 KB
1 0 1 - dictionary size 2048 KB
1 1 0 - dictionary size 4096 KB
1 1 1 - file is directory
字典大小也可以在WinRAR GUI中找到。
METHOD Packing method 1 byte
0x30 - storing
0x31 - fastest compression
0x32 - fast compression
0x33 - normal compression
0x34 - good compression
0x35 - best compression
而且Wikipedia也知道這一點:
的RAR壓縮實用程序是專有的,具有封閉的算法。 RAR由Eugene Roshal的兄長Alexander L. Roshal擁有。 RAR第3版基於Lempel-Ziv(LZSS)和部分匹配(PPM)壓縮預測,特別是由Dmitry Shkarin提供的PPMII的PPMd實現。
對於ZIP文件,我首先看看specifications和ZIP Wikipedia page。這些可能很有趣:
general purpose bit flag: (2 bytes)
compression method: (2 bytes)
該類型很容易,只需查看文件標題(PK
和Rar
)。
至於其他方面,我懷疑壓縮內容中的信息是否可用。
是的,它是可用的(至少爲rar)。但如何明顯取決於具體的文件格式。 – Artefacto
如果信息不可用,則無法解壓縮數據。 –
對於ZIP文件,有一個命令zipinfo。
當我輸入到我的控制檯時,它說沒有找到這樣的命令。 –
對於ZIP - 是的,zipinfo
對於RAR,頭很容易與任何7Zip的或WinRAR的發現,閱讀所附文件
感謝您的提示!當它生成.DOCX文件時,我需要找出MS Word使用的ZIP設置。 DOCX文件是一個ZIP存檔,包含多個XML文件和嵌入式媒體文件。這些你可以使用你選擇的工具進行批處理,但最後你需要用MS Word接受的設置將它重新打包成一個ZIP文件!我用zipinfo來分析MS Word寫的DOCX文件。我應該對DOCX ZIP格式做出最終結論,我會在這裏發佈。 – porg
這是一個相當古老的問題,但我想在把我的無論如何,因爲上面的一些方法對我來說並不容易。
你也可以用7-Zip來確定。打開檔案文件之後存在用於壓縮的方法柱:
通過的7-Zip(或的p7zip)命令行:
7z l -slt archive.file
如果專門爲壓縮方法尋找:
7z l -slt archive.file | grep -e '^---' -e '^Path =' -e '^Method ='
我也可以使用['grep -E'^((---)|(Path =)|(Method =))''](https://unix.stackexchange.com/a/37316/13308) 。 – palswim
太棒了,謝謝! – Intenex
第一個文件的METHOD字節通常在偏移量0x2D處找到。 –