1. 首页
  2. 综合百科
  3. zip是什么意思(ZIP 流式解压技术分析)

zip是什么意思(ZIP 流式解压技术分析)

简介:关于zip是什么意思(ZIP 流式解压技术分析)的相关疑问,相信很多朋友对此并不是非常清楚,为了帮助大家了解相关知识要点,小编为大家整理出如下讲解内容,希望下面的内容对大家有帮助!
如果有更好的建议或者想看更多关于综合百科技术大全及相关资讯,可以多多关注茶馆百科网。

在网络上打开ZIP文件需要多少步骤?下载,解压缩,获取所有文件。面对ZIP,能否“边看边玩”、“点播下载”?

今年6月,优酷绘本技术团队开发了一种新的解压方法——ZIP流媒体解压技术,并成功应用于优酷绘本二次开放项目,30M+绘本的平均加载时间仅为0.91s,加载时间比传统解压方式降低了88.3%,使用户的阅读体验得到提升。实际对比效果如下:

本文将介绍ZIP流压缩的原理和技术实现路径,希望能为大家将ZIP流压缩技术应用到更多的业务中带来启示。

一 什么是ZIP

ZIP是一种文件格式,定义如何组织多个文件和数据块以形成一个完整的文件。例如,我们常见的。apk,ipa,sketch都是ZIP文件。一个典型的程序创建一个像这样的ZIP文件:

压缩单个文件,形成单个文件数据块;在数据块前后添加文件描述。对每个要压缩的文件重复上述步骤后,将所有数据连接起来,形成一个更大的数据块;提取所有文件描述信息以生成附加到最后一个数据块末尾的“文件目录”。

我们将文件的前面称为本地文件头,文件的后面称为数据描述符,压缩文件本身称为文件数据,最后一个文件目录称为中心目录。以上所有文件加起来就是一个标准的ZIP文件。如下图所示:

提取ZIP文件的标准方法是从读取ZIP文件的末尾开始的。例如,提取上图中的File Data 1:

首先找到ZIP文件末尾的Central Directory数据块;在中央目录数据块中找到文件头1;从文件头1中读取本地文件头1的偏移量以及文件数据1的相关信息。根据偏移量找到本地文件头1;读取本地文件头1解密文件数据1(如有必要);1.解压文件数据。读取数据描述符1;使用“File Header 1”中保存的CRC-32校验步骤7中计算的CRC-32,保证解压后数据的完整性。如你所见,标准的解压在很大程度上依赖于最后的中央目录。当一个ZIP文件存储在cdn上时,即使我们只想访问其中一个文件,我们也必须下载整个ZIP来解压缩它。如果ZIP文件是100mb,但我们只需要访问10kb文件中的一个,下载整个ZIP将是巨大的流量浪费。

字体我们最初的想法之一是下载的同时解压?

要做到这一点,首先需要更改解压,使它不再依赖于最后的中央目录。

除了中央目录之外,每个文件数据头的Loca文件头部分还根据ZIP文件格式标准包含有关文件的信息。

如果本地文件头包含足够的信息,我们可以根据本地文件头提取文件数据。解压过程如下:

从一开始,搜索本地文件头1;读取本地文件头1解密文件数据1(如有必要);1.解压文件数据。读取数据描述符1;验证CRC32。那么本地文件头中究竟存储了什么?它是否满足解密和解压要求?让我们根据本地文件头的文档描述来绘制它们的排列:

主要信息是:

元数据签名是一个神奇的数字,用来标记接下来要做的事情。例如,本地文件头的签名是0x04034b50,用char表示。当读取对应的数据签名时,意味着下面的数据结构符合对应元数据的定义,需要使用对应的规则进行解析。

Compress Method数据块压缩算法。

压缩大小和未压缩大小有助于确定文件的结束地址和数据描述符的偏移量。在解密文件时,这两个大小也是HMAC计算的关键。

使用Magic Number作为元数据签名,我们可以通过简单地遍历字节以匹配Number来找到Loca File Header,而不是依赖于尾部的位置信息。此外,存储在Local File Header中的元数据足以确定解压缩算法、计算大小和验证CRC-32。

另一个问题是,解压缩算法是否支持流解压缩?是否存在特定的上下文依赖关系?通过理解压缩算法[1]的原理,我们知道所有的压缩算法都支持从头部解压。

而下载时,文件是从头到尾以连续的方式下载的,这自然又用从零开始解压的方式,可以初步实现边下解!

在我遇到加密的ZIP文件之前,一切都很顺利。加密后的ZIP文件的“本地文件头”中,除了签名和文件名外,其他关键信息将被隐藏。您需要读取中央目录中的密钥信息。

我们又一次回到了依赖中央目录的时代。

你还能在缺少这么多关键信息的情况下继续解密吗?我们需要先深入研究ZIP加密。

标准解压方式存在的不足

ZIP支持多种加密模式,其中最常见的是传统的PKWARE加密和AES加密。

传统的PKWARE加密是ZIP定义的基于密码的对称加密方法。每个字节的加密只与密码相关,加密前后的数据长度保持不变。这种与上下文无关的加密可以实现我们需要的流解密。

AES加密采用CTR方式。CTR模式对明文进行分组并生成计数器。计数器使用密钥加密以生成二进制字节流。使用此字节流和明文进行异或操作进行加密。它以同样的方式解密。

该模式还支持流解密。

这两种常见的加密方式都支持流解密,因此加密和解密所需要的密钥信息,在Local File Header中是否有存储就成为流解密的关键。

传统的PKWARE加密和AES加密都需要密码以外的一些关键信息,如盐值和加密算法的强度。此外,在AES加密的ZIP文件中,本地文件头中的压缩方法字段被擦除,因此我们不知道压缩算法,无法提取它。

到目前为止,问题集中在:

本地文件头是否包含足够的加密信息。加密的ZIP文件,压缩方法字段是否可以在中心目录以外的位置找到。ZIP设计器从ZIP文件格式设计之初就提供了文件扩展功能。一些额外的扩展数据可以存储在本地文件头的额外字段中。ZIP AES加密指令[2]告诉我们关于AES的信息存储在这里。其关键信息如下:

原来压缩算法隐藏在额外数据中。那么盐储存在哪里呢?答案在文件数据的末尾。

综上所述,我们已经找到了解密所需的所有关键信息,并探索了整个流解密和解压的所有技术要点。剩下的就是执行原则和润色细节。

二 优酷技术方案:ZIP流式解压

说了这么多,流媒体解压缩有什么价值?

由于流的解压缩实现了下载的同时解压缩,整个操作的时间从下载+解压缩变成了大约等于纯下载的时间,直接抹去了解压缩的时间。在解压缩39.1MB ZIP包下载的测试中,时间从9.08秒减少到4.17秒,几乎增加了100% !此外,无需等待整个ZIP下载被解压缩,只需在解压缩了一小部分数据后显示UI。用户端看起来就像在一瞬间被解压缩了一样。

因此,流解压可以用于许多时间敏感的操作,也可以用于优化基于ZIP文件的服务。例如,基于ZIP的全局皮肤加速、基于ZIP的Web资源缓存加载加速等等。优酷绘本妙开的推出正是基于这一技术。

本文主要介绍了关于zip是什么意思(ZIP 流式解压技术分析)的相关养殖或种植技术,综合百科栏目还介绍了该行业生产经营方式及经营管理,关注综合百科发展动向,注重系统性、科学性、实用性和先进性,内容全面新颖、重点突出、通俗易懂,全面给您讲解综合百科技术怎么管理的要点,是您综合百科致富的点金石。
以上文章来自互联网,不代表本人立场,如需删除,请注明该网址:http://seotea.com/article/1450191.html