2012-10-28 77 views
5

我有一些文件,有一些隨機字節和多個gzip文件。我怎樣才能找到一些文件內的gzip流的開始和結束? gzip流之間有許多隨機字節。所以,基本上我需要找到任何gzip文件並從那裏獲取。查找gzip開始和結束?

+0

你是否和前一段時間一樣問過如何解壓縮.exe文件? :-) –

+0

@Jan Dvorak不,我不是 – Fedcomp

回答

8

RFC 1952 - GZIP讀:

每個GZIP文件只是一堆數據塊(被稱爲成員),每個文件包含的。

每個成員開始與以下字節:

  • 爲0x1F(ID1)
  • 0x8B(ID2)
  • 壓縮方法。 0x08DEFLATE d文件。 0-7是保留值。
  • 標誌。 前三位被保留,而必須爲零
  • (4字節)上次修改時間。可能設置爲0.
  • 額外的標誌,由壓縮方法定義。
  • 操作系統,實際上是文件系統。 0 = FAT,3 = UNIX,11 = NTFS

成員的末尾沒有分隔。你必須實際走完整個成員。請注意,連接多個有效的GZIP文件會創建一個有效的GZIP文件。還要注意,超過成員可能仍然會導致成員讀取成員(除非解壓縮庫是故障急切而完全的)。

1

搜索三字節gzip簽名0x1f 0x8b 0x08。當你找到它時,嘗試解碼一個以0x1f開頭的gzip流。如果你成功了,那麼這是一個gzip流,它結束了。如果它是1,則繼續從gzip流之後搜索;如果不是,則在0x08之後繼續搜索。然後你會發現他們所有的人,你會知道他們的位置和跨度。