2014-09-22 85 views
1

全部。用winrar創建的.zip格式與7-zip的區別

我正在使用第三方庫存檔/解壓縮一些文件。 輸入/輸出格式爲.zip。

但我發現lib可以很好地讀取用WinRAR創建的檔案,但無法讀取使用7-zip創建的檔案。

有誰能告訴我問題是什麼以及如何解決問題。歸檔的起動

六角視圖,用WinRAR創建:

50 4B 03 04 14 00 00 00 08 00 EC 88 25 45 6E 1A ....的

六角視圖開始歸檔的,7-拉鍊創建:

50 4B 03 04 14 00 00 00 08 00 88 ED 25 45 6E 1A ....

區別在於字節ECED

回答

0
可以使用幾種不同 compression formats它不與基於例如 Info-ZIP源代碼標準ZIP壓縮/解壓縮庫兼容創建

7-Zip文件。

像WinRAR和Total Commander這樣的應用程序支持原生ZIP文件的創建/提取,因此另外還有一個用於從非標準7-Zip文件中提取文件的DLL。

查看問題我可以在商業應用程序中使用7-Zip的EXE或DLL文件嗎?FAQ 7-Zip頁面。

2

這是一個ZIP文件的頭結構:

+---------------------------------------------------------------------+ 
|        BYTE         | 
|0x0 0x1 0x2 0x3|0x4 0x5|0x6 0x7| 0x8 0x9 |0xA 0xB|0xC 0xD|  | 
+---------------+-------+-------+-----------+--------+--------+-------+ 
| signature |version| flags |compression|mod time|mod date| CRC32 | 
+---------------+-------+-------+-----------+--------+--------+-------+ 
| 50 4B 03 04| 14 00| 00 00| 08 00 |EC/ED 88| 25 45|  | 
+---------------------------------------------------------------------+ 
  • 簽名總是爲0x50 0x4B×03×04(如你的情況)。爲0x50 = 'P',0x4B = 'K'(Phillip Katz)提取(0×14 0×00 = 20 - > ZIP 2.0)需要
  • 版本
  • 通用比特標誌(無標記,文件是不加密後/默認語言編碼)
  • 壓縮方法是放氣(08)

這樣改變的是修改時間(只是一些分鐘)的唯一的東西。

甚至CRC32的前兩個字節也是一樣的。如果唯一的區別EC/ED值,則問題不應該是存檔內容。

更多參考:https://users.cs.jmu.edu/buchhofp/forensics/formats/pkzip.html