ZIP格式


總體格式

  • 分文件頭+文件壓縮數據
  • 中心目錄+中心目錄記錄結束符

1.分文件頭信息

0X 50 4b 03 04

分文件頭信息標志,一般是zip文件的開頭,可以通過這個判斷文件格式

14 00

解壓縮所需版本,一般固定

00 09

表示加密

這里,如果是 00 00 就表示未加密。另外,關於Zip的偽加密,這里是以00 00 的形式出現。但是在解壓的時候還是會有提示要輸入密碼,這跟后面的其他塊有關。只要這里是 00 00 ,就一定是未加密的。

其他信息

2.中心目錄結構

0X 50 4b 01 02

中心文件頭信息標志

其他信息

3.中心目錄記錄結束符

0X 50 4b 05 06

中心目錄標記結束符,也就是整個zip結束的標志,不過后面還有一些其他數據塊。

關於,zip加密算法

1.加密方法

  • PKZIP中使用的加密方法由Roger Schlafly提供。ZIP文件在解壓
    縮前必須先解密。
  • 每個加密文件具有一個12字節的加密文件頭擴展信息,存儲於數據區的起始位置,加密前先設置一個起始值,然后被三個32位的密鑰加密。密鑰被使用者提供的口令初始化。
  • 12個字節加密之后,由PKZIP的偽隨機數產生方法,結合PKZIP中使用CRC-32算法對密鑰進行更新。
1.用口令對三個32位密鑰初始化。  
        K(0)=305419896,K(1)=591751049,K(2)=878082192  
        循環   for  i=0   to   length(password)-1  
        調用更新密鑰函數  update_keys(password(i))  
        結束循環(循環口令長度次)  
        其中更新密鑰函數為: 
        update_keys(char):  
        Key(0)=crc32(key(0),char)  
        Key(1)=Key(1)+(Key(0)&   000000ffH)  
        Key(1)=Key(1)*134775813+1  
        Key(2)=crc32(Key(2),Key(1)〉〉24)  
        end   update_keys  
        CRC32函數中,給定一個4字節的CRC值和一個字符,返回一個由CRC  
-32算法更新的CRC。具體為:  
        crc32(c,b)=crc32tab[(c^b)&0xff]^(c> >8),crc32tab[256]的值  
為固定的256個4字節數。
   2.讀取並加密12字節的加密頭,再次對密鑰進行初始化。  
        將12個字節的加密頭讀入緩沖區buffer(0)至buffer(11),循環fo  
r   i=0   to   11  
        C=buffer(i)^decrypt_byte()  
        update_keys(C)  
        buffer(i)=C  
        結束循環(循環12次)  
        其中的decrypt_byte()函數為:  
        unsigned   char   decrypt_byte()  
        local   unsigned   short   temp 
        temp=Key(2)¦2  
        decrypt_byte=((temp*(temp^1))> > 8)&0xff 
        end   decrypt_byte   

該步結束后,緩沖區中最后的二個字節buffer(10)和buffer(11)
將成為加密文件校驗碼的二個最高位(按低至高順序存放)。
對ZIP加密文件進行解壓縮前,PKUNZIP軟件將使用者提供的口令按上述二個步驟進行處理,得到的結果與校驗碼的二個高位字節進行比較,只有當提
供了正確的口令時,結果一致,才能進行后續的解壓縮過程,否則,PKZI
P報告錯誤信息,程序自動結束。

3.讀取壓縮的數據流並以加密密鑰對其進行加密。  
        壓縮數據流按下述過程加密: 
        循環   直至數據流結束  
        C=數據流的一個字節  
        temp=C^decrypt_byte()  
        update_keys(temp)  
        輸出temp  
        結束循環  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM