精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

ZIP 也能邊下載邊解壓?流式解壓技術揭秘!

開發 開發工具
對于一個 ZIP 文件,由于標準的解壓方式總是從讀取文件的末尾開始的,因此必須下載完整個 ZIP 解壓后才能訪問。

 ????對于一個 ZIP 文件,由于標準的解壓方式總是從讀取文件的末尾開始的,因此必須下載完整個 ZIP 解壓后才能訪問。當用戶通過網絡訪問 ZIP 文件時,下載解壓所帶來的耗時將大大降低用戶體驗。那么能不能邊下載邊解壓呢?阿里巴巴文娛技術 喻遠將介紹 ZIP 流式解壓的原理和技術實現路徑。

打開網絡上的 ZIP 文件需要幾步?下載,解壓,拿到所有文件。面對一個 ZIP,能不能「邊下邊播」、「按需下載」?

今年 6 月,優酷繪本技術團隊開發出新的解壓方式——ZIP 流式解壓技術,并成功應用在優酷繪本秒開項目中,30M+ 繪本平均加載時長只需 0.91s,加載耗時比傳統的解壓方式降低了 88.3%,讓用戶的閱讀體驗直線提升。實際對比效果如下:

??

??

 

優化前

??

[[341409]]

??

 

優化后

本文將介紹 ZIP 流式解壓的原理和技術實現路徑,希望為大家帶來啟發,將 ZIP 流式解壓技術更多的應用到業務中。

一 什么是ZIP

ZIP 是一種文件格式,定義了如何將多個文件、數據塊組織在一起形成一個完整的文件。例如我們常見的 .apk,.ipa,.sketch,都是ZIP文件。通常程序是這樣創建 ZIP 文件的:

壓縮單個文件形成單文件數據塊;

在數據塊前后添加文件描述信息;

對每個待壓縮的文件重復以上步驟后,拼接所有數據形成更大的數據塊;

提取所有文件描述信息,生成一份「文件目錄」,附在最后一個數據塊的尾部。

我們將文件前部描述信息稱為 Local File Header,文件后部描述信息稱為 Data Descriptor, 被壓縮的文件本身稱為 File Data,將最后的文件目錄稱為 Central Directory。以上所有合在一起,就是一個標準的 ZIP 文件。如下圖:

??

??

 

ZIP 文件格式

一個標準的解壓方式總是從讀取 ZIP 文件末尾開始的,我們以解壓上圖的 File Data 1 為例:

??

??

 

首先在 ZIP 文件末尾找到 Central Directory 數據塊;

在 Central Directory 數據塊中找到 File Header 1;

從 File Header 1 中讀取 Local File Header 1 的偏移量和 File Data 1 的相關信息;

根據偏移量找到 Local File Header 1;

讀取 Local File Header 1;

解密 File Data 1(如果需要);

解壓 File Data 1;

讀取 Data Descriptor 1;

使用 File Header 1 中保存的 CRC-32 做校驗步驟 7 中計算的 CRC-32,以確保解壓后的數據完整性。

標準解壓方式存在的不足

可以發現,標準的解壓強依賴尾部的 Central Directory。當 ZIP 文件存儲在 cdn 上時,哪怕我們只想訪問其中的一個文件,也必須下載整個 ZIP 解壓后才可訪問。假如 ZIP 文件有 100 MB,但是我們只需要訪問其中的某一個 10 KB 的文件,那么下載整個 ZIP 將是對流量的巨大浪費。

二 優酷技術方案:ZIP流式解壓

我們的一個初步的想法是能不能邊下載邊解壓?

要實現這點,首先需要改變解壓方式,使其不能再依賴尾部的 Central Directory。

根據 ZIP 文件格式標準可知,除了 Central Directory,每個 File Data 頭部的 Loca File Header 部分也包含了該文件的相關信息。

假如 Local File Header 中包含了充分的信息,我們也許可以基于 Local File Header 去解壓文件數據,其解壓流程就可以變為:

??

??

 

從頭開始,搜索到 Local File Header 1;

讀取 Local File Header 1;

解密 File Data 1(如果需要);

解壓 File Data 1;

讀取 Data Descriptor 1;

CRC32 的校驗。

那么 Local File Header 里到底存儲了什么?是否滿足解密解壓所需?

了解 Local File Header

我們根據文檔對 Local File Header 的描述,畫出其二進制文件中的排列:

??

??

 

Local File Header 數據結構

其中的關鍵信息為:

Signature

元數據簽名

Compress Method

壓縮算法

Compressed Size

壓縮后文件大小

Uncompressed Size

壓縮前文件大小

CRC-32

文件的循環冗余校驗值

File name

文件名

元數據簽名是一個 Magic Number,用來標記接下來數據是什么內容。例如 Local File Header 的簽名是 0x04034b50,用 char 表示也就是 { 'P', 'K', '3', '4' }。當讀取到對應數據簽名時,則意味著接下來的數據結構符合對應元數據的定義,需要使用對應規則解析。

Compress Method 指明數據塊用何種算法壓縮,解壓需要使用對應的算法。

Compressed Size 和 UnCompressed Size可以幫助確定文件的結尾地址和 Data Descriptor 的偏移量。這兩個 Size 也是文件解密時 HMAC 計算的關鍵。

有了 Magic Number 作為元數據簽名,我們只需要逐字節遍歷去匹配這個 Number,就可以找到 Loca File Header,而不再需要依賴尾部的定位信息。而且 Local File Header 中存儲的元數據足夠我們決定解壓算法、計算大小、校驗 CRC-32 了。

還有一個問題是,解壓縮算法是否支持流式解壓縮?是否有特定的上下文依賴?通過了解壓縮算法的原理[1],我們知道,所有的壓縮算法都是支持從頭部開始流式解壓的。

而下載方面,文件是以從頭到尾連續的方式下載,這又天然地和和從頭解壓的方式配合,便可以初步實現邊下邊解!

加密 ZIP 文件的問題

一切都相當順利,直到遇到了加密后的 ZIP 文件。加密后的 ZIP 文件的 Local File Header 中的關鍵信息除了簽名和文件名以外,其他信息都被隱去,需要去 Central Directory 中讀取。

再一次,我們回到了依賴 Central Directory 的狀態。

在失去如此多關鍵信息的情況下能否繼續做到流式解壓?我們需要先挖掘一下 ZIP 的加密方式。

ZIP 的加密方式

ZIP 文件支持多種加密方式,最常見的是 Traditional PKWARE Encryption 和 AES Encryption 。

Traditional PKWARE Encryption 是 ZIP 自定義的一種基于密碼的對稱加密方式,每個字節的加密僅和密碼有關,加密前后的數據長度不變。這種不依賴上下文的加密方式可以實現我們需要的流式解密。

AES 加密采用的是 CTR 模式。CTR 模式將明文分組,并生成一個計數器。使用密鑰對計數器進行加密生成二進制字節流。利用這個字節流和明文進行 XOR 操作進行加密。其解密方式也是一樣的。

這種方式也支持流式解密。

??

??

 

兩種常用的加密方式都支持流式解密,那么加解密需要的關鍵信息,在 Local File Header 中是否有存儲就成了能否流式解密的關鍵。

流式解密的關鍵信息

無論是 Traditional PKWARE Encryption 還是 AES Encryption,在解密時都需要一些除密碼之外的關鍵信息,例如鹽值,加密算法的強度等。此外,在 AES 加密的 ZIP 文件中, Local File Header 中的 Compress Method 字段被抹去,這樣我們便無法知曉壓縮算法,因此無法解壓。

至此,問題集中為:

  • Local File Header 中是否有足夠的加密所需信息。
  • 加密的 ZIP 文件,是否能在除 Central Directory 以外的位置找到 Compress Method 字段。

Local File Header 中加密相關的信息

ZIP 格式的設計者在設計 ZIP 文件格式的初期就提供了文件拓展能力,一些額外的拓展數據可以存放在 Local File Header 的 Extra Field 中。ZIP AES 加密說明書[2]告訴我們 AES 的相關信息就存放在這里。其關鍵信息如下:

Signature

Extra Data 簽名(0x9901)

AES Encryption strength

AES 加密強度(128或192或256)

Actual compress Method

真正的壓縮算法

原來壓縮算法被藏到了 Extra Data 中。那么鹽值被存放在哪里了?答案是存放在 File Data 的頭尾。

??

??

 

綜上,我們找到解密所需的所有關鍵信息,整個流式解密解壓的所有技術點都被我們探索完。剩下的便是按原理實現,以及細節的打磨。

三 總結

說了那么多,流式解壓究竟有什么價值呢?

由于流式解壓實現了邊下載邊解壓,將整個操作的時長從下載 + 解壓縮變成了約等于純下載的時長,直接抹掉了解壓的耗時。在 39.1 MB 大小的 ZIP 包下載解壓測試中,耗時從 9.08 秒降低至 4.17 秒,有將近 100% 的提速!同時,你可以不必等待整個 ZIP 下載解壓完,而是在解壓完一小部分數據的時候,就直接展示 UI。用戶側看起來就好像一瞬間就解壓完了。

因此,流式解壓可以應用在許多時間敏感的操作里,也可以用來優化基于 ZIP 文件的相關業務。例如基于 ZIP 的全局換膚加速、基于 ZIP 的 Web 資源緩存加載的加速等等。前言中的優酷繪本秒開就是基于這一技術實現。

參考

[1]https://houbb.github.io/2018/11/09/althgorim-compress-althgorim-12-zip-02[2]AES Encryption Information: Encryption Specification AE-1 and AE-2https://www.winzip.com/win/en/aes_info.html[3]ZIP File Format Specificationhttps://pkware.cachefly.net/webdocs/APPNOTE/APPNOTE-6.2.1.TXT[4]AES Coding Tips for Developershttps://www.winzip.com/win/en/aes_tips.html

【本文為51CTO專欄作者“阿里巴巴官方技術”原創稿件,轉載請聯系原作者】

??戳這里,看該作者更多好文??

 

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2015-04-08 15:40:53

php在線解壓解壓zip文件

2021-05-08 00:00:27

JavaScript ZIP文件

2024-01-04 12:47:00

Linux命令工具

2018-02-28 13:20:40

Python解壓zip

2009-12-30 16:46:09

Ubuntu orac

2021-12-10 15:22:26

Go Zip 文件

2019-10-17 17:15:01

Linux解壓文件命令

2011-12-30 11:14:41

Javazip

2011-08-15 14:07:53

Objective-C解壓縮ZIP文件

2012-12-26 09:31:44

C#Winform

2012-05-10 09:43:28

2024-04-01 00:05:00

ChatGPTSSE

2021-01-03 09:44:34

解壓軟件解壓神器應用

2010-01-04 10:36:34

ubuntu Json

2010-01-08 14:13:14

Ubuntu 8.10

2010-01-07 16:47:01

2024-01-19 16:37:17

Linux操作系統

2010-01-07 16:34:08

Ubuntu apac

2016-03-04 09:42:12

無線技術WiFi

2009-12-25 18:05:05

Linux壓縮程式
點贊
收藏

51CTO技術棧公眾號

欧美性xxxx在线播放| 美女免费视频一区二区| 亚洲成色999久久网站| 欧美老熟妇喷水| 日本中文字幕在线看| 国产一二精品视频| 欧美亚洲国产视频小说| 性少妇xx生活| 国产欧美啪啪| 欧美日韩免费视频| 国产69精品久久久久久久| 国产毛片在线| 成人高清免费观看| 国产伦精品一区二区三区精品视频| 唐朝av高清盛宴| 精品国产91久久久久久浪潮蜜月| 日韩视频在线你懂得| 成人在线激情网| 欧美xxxx性xxxxx高清| 国产午夜三级一区二区三| 成人欧美一区二区| 在线视频 91| 性欧美长视频| 久久久久五月天| 国产成人免费在线观看视频| 欧洲vs亚洲vs国产| 色天使综合视频| 精品亚洲国内自在自线福利| 2018中文字幕一区二区三区| 欧美激情国产精品免费| 91久久夜色精品国产按摩| 日韩精品免费在线视频| 中国特级黄色片| 91麻豆精品国产综合久久久 | 日韩精品一区二区在线观看| www.99在线| 樱花草涩涩www在线播放| 亚洲午夜电影在线观看| 懂色av一区二区三区四区五区| 人妻一区二区三区四区| 国内精品免费视频| 国精产品视频一二二区| 欧美重口另类| 欧美精品一区二区三区蜜桃视频| 欧洲在线免费视频| 天堂а√在线最新版中文在线| 拍真实国产伦偷精品| 日韩一级不卡| 久久99视频精品| 精品自拍偷拍视频| 亚洲精品无遮挡| 一本精品一区二区三区| 在线日韩日本国产亚洲| 国产精品20p| 久久99久久人婷婷精品综合 | 国产精品欧美久久久久天天影视| 日韩高清一区二区| 国产精品av免费在线观看| 日韩欧美在线观看免费| 久热精品视频| 国产精品日日做人人爱| 国产在线观看第一页| 日韩高清在线电影| 成人国产在线视频| 精品国产乱码一区二区三| 国产精品一区二区在线播放| 97人人干人人| 亚洲欧美日韩一区二区三区在线| 国产精品午夜国产小视频| 日韩在线播放中文字幕| 久久久国产精品一区二区中文| 亚洲国产一区二区a毛片| 欧美另类一区二区三区| 久久99爱视频| 老熟妇仑乱视频一区二区| www.中文字幕| av亚洲精华国产精华精华| 欧美不卡在线一区二区三区| 青青国产在线| 国产精品女同互慰在线看 | 欧美人妖在线| 在线播放日韩av| 男女做暖暖视频| 激情六月综合| 国产精品91久久| 国产美女无遮挡永久免费| 精品一区二区三区久久久| aa日韩免费精品视频一| 日本人妖在线| 最新国产精品久久精品| av日韩一区二区三区| 天天免费亚洲黑人免费| 欧美一级生活片| 国产精品jizz| 一区二区中文字| 欧美亚洲视频一区二区| 91国内精品视频| 成人av影院在线| 亚洲一区二区三区在线观看视频| 麻豆蜜桃在线| 欧美日韩国产片| 日本少妇毛茸茸| 99久久夜色精品国产亚洲96| 78m国产成人精品视频| ,亚洲人成毛片在线播放| 99精品久久只有精品| 丰满女人性猛交| 精品国产第一福利网站| 欧美成人r级一区二区三区| www色com| 99亚洲一区二区| 91在线网站视频| 国产h在线观看| 亚洲444eee在线观看| 中文字幕久久av| 禁断一区二区三区在线| 午夜精品理论片| av中文字幕免费| 国产精品午夜在线| 六月激情综合网| 日韩 欧美 综合| 成人黄色av| 97成人精品区在线播放| 99久久99久久久精品棕色圆| 国产性做久久久久久| av在线观看地址| 国产日韩中文在线中文字幕| 国产一区二区三区18| 日本少妇全体裸体洗澡| 国产伦精品一区二区三区视频青涩| 欧美一区二区三区精美影视 | 国产最新精品视频| 国产女主播福利| 国产精品国产三级国产有无不卡 | 国内精品视频666| 日韩中文一区| 春暖花开亚洲一区二区三区| 国产视频精品久久久| 日本黄色片视频| www.成人网.com| 黄色一级片在线看| 8x国产一区二区三区精品推荐| 久久久91精品| 国产三级伦理片| 亚洲免费观看高清| 波多野结衣免费观看| 999视频精品| 国产日韩中文在线| 免费黄色在线观看| 欧美另类高清zo欧美| 波兰性xxxxx极品hd| 激情偷乱视频一区二区三区| 中文字幕一区二区三区精彩视频 | 国产精品乱码一区二区三区| 国产羞羞视频在线播放| 日韩欧美一卡二卡| 久久久久黄色片| 不卡免费追剧大全电视剧网站| 久久国产精品网| 秋霞影院一区二区三区| 人妖精品videosex性欧美| 久久久久久久影视| 欧美主播一区二区三区美女| 9.1片黄在线观看| 韩国精品久久久| 国产精品久久久久久久久电影网| gogo人体一区| 国产91精品青草社区| 精华区一区二区三区| 欧美日韩精品系列| 欧美二区在线| 欧美日韩在线国产| 国产精品一区二区久激情瑜伽| 欧美日韩中文字幕在线播放| av综合网站| 日本精品在线视频| 免费网站成人| 亚洲国产精品专区久久| 天堂网视频在线| 日韩美女精品在线| 亚洲精品乱码久久| 麻豆国产欧美日韩综合精品二区| 麻豆一区二区三区在线观看| 精品亚洲免a| 国产精品国产三级国产aⅴ9色| 日p在线观看| 亚洲国产成人91精品| 亚洲永久精品一区| 亚洲激情六月丁香| 爱爱的免费视频| 国产一区在线精品| 日日鲁鲁鲁夜夜爽爽狠狠视频97 | 国产aa精品| 97超碰蝌蚪网人人做人人爽| 日本中文字幕在线观看| 亚洲精品99久久久久中文字幕| 久久国产香蕉视频| 午夜日韩在线观看| 国产精品国产三级国产传播| 97se亚洲国产综合自在线不卡| 五月激情五月婷婷| 欧美亚洲一区| 黄色一级片黄色| 成人精品久久| 久久精品magnetxturnbtih| 四虎精品在线观看| 日本一区二区不卡| 欧美男男video| 日韩中文字幕在线播放| 欧美色18zzzzxxxxx| 日韩欧美国产精品| 波多野结衣一区二区三区四区| 亚洲综合视频在线| 国产亚洲精品久久久久久豆腐| 91视频.com| 成人一区二区三区仙踪林| 麻豆国产精品777777在线| 黄色影院一级片| 国产一区二区三区四区三区四| 亚洲mv在线看| 国产乱码精品一区二区三区四区| 动漫精品视频| 97色婷婷成人综合在线观看| 国产精品久久久久久久久免费看 | 性欧美长视频| 国产69精品久久久久999小说| 亚洲综合中文| 曰韩不卡视频| 色88久久久久高潮综合影院| 欧美在线播放一区二区| 欧美18免费视频| 激情小说综合网| japanese色系久久精品| 99精品国产高清在线观看| 国产精品一区二区精品视频观看| 国产精品久久久久久av福利软件| 欧美自拍电影| 日本精品久久电影| 日本а中文在线天堂| 91国产视频在线播放| 国产在线天堂www网在线观看| 国产欧美一区二区色老头| 色婷婷久久综合| 岛国片在线免费观看| 91麻豆精品秘密| 国内精品久久99人妻无码| 久久久久久穴| 国产精品你懂的在线欣赏| 亚洲一区久久久| 91p九色成人| 国产精品爽爽ⅴa在线观看| 欧美色网在线| 精品国产一区二区亚洲人成毛片| 日本三级中文字幕在线观看| 全国精品免费看| 精品不卡在线| 亚洲三级精品| 日日夜夜精品网站| 日韩免费在线| 天天干天天色天天爽| 成人av二区| 一级一片免费播放| 综合一区av| www污在线观看| 亚洲美女毛片| 97xxxxx| 国产成人亚洲精品无码h在线| 美女毛片在线看| 亚洲免费av网址| 岛国在线视频免费看| 日韩亚洲第一页| 国产www视频在线观看| 91av视频在线播放| 91在线成人| 亚洲一区久久久| 狼人精品一区二区三区在线 | 久久免费福利视频| 亚洲一区资源| 91精品国产综合久久香蕉的用户体验| 日韩视频一二区| 欧美日韩精品综合| 国产精品久久观看| 一女被多男玩喷潮视频| 免费成人在线影院| 97超碰免费在线观看| 国产寡妇亲子伦一区二区| 精品黑人一区二区三区久久| 91久久精品日日躁夜夜躁国产| 午夜精品小视频| 日韩av影视在线| 欧美a免费在线| 7777精品伊人久久久大香线蕉经典版下载| 国产精品69久久久久孕妇欧美| 一区二区三区免费网站| 丁香六月婷婷综合| 欧美一区二区三区视频| 亚洲AV第二区国产精品| 久久天天躁夜夜躁狠狠躁2022| 亚洲区欧洲区| 午夜电影网亚洲视频| 免费无码毛片一区二区app| 色婷婷久久99综合精品jk白丝| 国产精品久久久久久久久毛片| 亚洲国产日韩欧美在线99| 一本一道波多野毛片中文在线 | 在线看的片片片免费| 偷拍亚洲欧洲综合| 国产一区二区小视频| 日韩av最新在线| 八戒八戒神马在线电影| 国产成人极品视频| 久久a爱视频| 潘金莲一级淫片aaaaaa播放1| 日韩av在线免费观看不卡| 黄色国产在线视频| 亚洲女人的天堂| 怡红院男人天堂| 亚洲男人天堂久| 免费毛片在线看片免费丝瓜视频 | 久久亚洲成人精品| 欧美羞羞视频| 久久99精品久久久久久三级| 亚洲乱码免费伦视频| 日韩在线第三页| 91啦中文在线观看| 日本在线视频免费观看| 欧美一区二区三区免费在线看| seseavlu视频在线| 日本一区二区在线免费播放| 国产欧美自拍一区| 欧美日韩dvd| 国产一区二区精品在线观看| 91狠狠综合久久久久久| 色妞www精品视频| 国产精品久久久久国产a级| 日本午夜精品久久久久| 日韩精品久久久| 久久婷婷丁香| 男人操女人动态图| 从欧美一区二区三区| 色妞一区二区三区| 一级黄色在线播放| 在线黄色网页| 久久av.com| 在线观看亚洲精品福利片| 日韩在线国产精品| 免费高清完整在线观看| 国产精品成av人在线视午夜片 | 成人91免费视频| 综合五月婷婷| 韩国av中国字幕| 亚洲第一成人在线| 久久撸在线视频| 国产精品99久久久久久似苏梦涵| 可以免费看av的网址| 欧美精品在欧美一区二区少妇| √天堂资源地址在线官网| 国产精品视频中文字幕91| 色综合狠狠操| 美女被艹视频网站| 亚洲一区二区三区四区在线| 日本精品一区二区在线观看| 欧美一二三视频| 成人黄色av| 男男受被啪到高潮自述| 亚洲成人动漫av| 国产福利片在线| 国产日韩专区在线| 影音先锋亚洲电影| 大又大又粗又硬又爽少妇毛片| 久久久五月婷婷| 久久综合在线观看| 一区二区三区av电影 | 国产成人av电影在线播放| 麻豆一区产品精品蜜桃的特点 | 国产精品视频1区| 亚洲成人三区| 国产麻豆xxxvideo实拍| 在线亚洲高清视频| 1区2区3区在线视频| 精品视频免费观看| 麻豆高清免费国产一区| 国产一级中文字幕| 一本色道久久综合狠狠躁篇怎么玩| 久久夜夜久久| 少妇人妻大乳在线视频| 国产女主播视频一区二区| www.色呦呦| 国产99视频精品免视看7| 91精品精品| 51调教丨国产调教视频| 欧美日韩不卡视频| 超级白嫩亚洲国产第一| 中文字幕不卡每日更新1区2区| 成人综合婷婷国产精品久久蜜臀| 人人妻人人爽人人澡人人精品| 久久综合久久八八| 免费欧美一区| 国产裸体视频网站| 欧美日韩精品一区二区三区|