我讀過,ZIP文件先從以下字節:密碼保護的ZIP文件的字節簽名是什麼?
50 4B 03 04
參考:http://www.garykessler.net/library/file_sigs.html
問:是否有指示ZIP文件的字節一定的順序已經被密碼保護?
我讀過,ZIP文件先從以下字節:密碼保護的ZIP文件的字節簽名是什麼?
50 4B 03 04
參考:http://www.garykessler.net/library/file_sigs.html
問:是否有指示ZIP文件的字節一定的順序已經被密碼保護?
這是不正確的ZIP文件必須以
50 4B 03 04
項zip文件內開始50 4B 03 04...
..和經常,純zip文件啓動一個ZIP條目在文件中的第一件事開始。但是,並不要求zip文件以這些字節開頭。所有以這些字節開頭的文件都是,可能是 zip文件,但並非所有zip文件都以這些字節開頭。
例如,您可以創建自解壓包這是一個PE-COFF文件,一個普通的EXE,其中有實際是的文件,這是4D 5A ...
簽名。然後,稍後在exe文件中,您可以存儲以50 4B 03 04...
開頭的zip條目。該文件既是.exe又是.zip。
自解壓存檔不是唯一不以50 4B 03 04
開頭的zip文件類。您可以用這種方法「隱藏」壓縮文件中的任意數據。閱讀以這種方式格式化的zip文件時,WinZip和其他工具應該沒有問題。
如果您在文件中找到50 4B 03 04
簽名,無論是在文件的開頭還是其他位置,您都可以查看接下來的幾個字節以確定該特定條目是否已加密。通常情況下,它看起來像這樣:
50 4B 03 04 14 00 01 00 08 00 ...
前四個字節是條目簽名。接下來的兩個字節是「需要提取的版本」。在這種情況下,它是0x0014,它是20.根據pkware規範,這意味着需要版本2.0的pkzip規範來提取條目。 (該條目使用的最新zip「功能」由該規範的v2.0描述)。如果在zip文件中使用更高級的功能,那麼可以在那裏找到更高的數字。 AES加密需要規範v5.1,因此您應該在該標頭中找到0x0033。 (並非所有的zip工具都尊重這一點)。
接下來的2個字節表示通用位標誌(規範稱它爲「位標誌」,即使它是位字段),在本例中爲0x0001。這有位0設置,這表明條目已加密。
該位標誌中的其他位有意義,也可以設置。例如,第6位表示使用了強加密 - AES或其他更強的加密。位11表示該條目對文件名和註釋使用UTF-8編碼。
所有這些信息都在PKWare AppNote.txt spec中有效。
它是受密碼保護的zip歸檔文件中的基礎文件。您可以在檔案(例如自述文件和內容)中擁有一系列密碼保護和密碼不受保護的文件。
如果您按照您參考的URL中描述ZIP文件的鏈接,會發現this one討論了指示ZIP存檔中的文件是否已加密的位。似乎檔案中的每個文件都可以獨立加密或不加密。
嗯...我期待實現一些簡單的C#IsZipFile(pathToFile)和IsPasswordProtectedZipFile(pathToFile)。我曾假設密碼適用於整個檔案。 – frankadelic 2009-10-01 17:06:33
儘管存在規範定義的「中央目錄加密」這樣的事情,但它接近「對整個存檔應用密碼」,但密碼通常不適用於整個文件。很少有工具支持此功能。 可以生成一個IsZipFile()方法 - 掃描到最後並查找zip目錄。 IsPasswordProtected()是類似的,除非需要驗證中央目錄的存在並檢查是否有任何條目受到保護。 – Cheeso 2009-10-01 17:48:05
好吧,如果你有一個自解壓檔案,你在技術上沒有ZIP文件了,你有一個PE可執行文件。它包含的內容是附加細節。例如,可執行文件可以是安裝程序,可以是自解壓文件,可以是正常的主程序入口點,可以是啓動程序,但所有這些只是與所討論文件的類型無關的單獨分類。 – hijarian 2014-09-25 04:44:04