当前位置: 新豪天地登录网址 > www.3559.com > 正文

解压完其实是个4,ZIP压缩炸弹

时间:2019-10-03 22:08来源:www.3559.com
原标题:一个42KB的文件,解压完其实是个4.5PB的“炸弹”。。 经常用电脑上网的朋友都知道,网上下载的各种软件大都会使用压缩包格式,最常见的有ZIP、RAR、7-ZIP。压缩技术能减少文

原标题:一个42KB的文件,解压完其实是个4.5PB的“炸弹”。。

经常用电脑上网的朋友都知道,网上下载的各种软件大都会使用压缩包格式,最常见的有ZIP、RAR、7-ZIP。压缩技术能减少文件的体积,提升下载速度。但在一些时候,解压会膨胀的特性使它成为恶搞的工具。

什么是压缩文件?压缩文件的类型有哪些?下面是本网带来的关于压缩文件的主要内容介绍以供参考。

1. 压缩类型的选择

style="font-size: 16px;">转载自微信公众号:差评(chaping321)

www.3559.com 1

简单的说,就是经过压缩软件压缩的文件叫压缩文件,压缩的原理是把文件的二进制代码压缩,把相邻的0,1代码减少,比如有000000,可以把它变成6个0 的写法60,来减少该文件的空间。

  依据压缩方式的不同,压缩分为有损压缩和无损压缩。其中MP3一类的文件在一定程度的有损压缩下,人的感知不是十分明显而且还是MP3文件的体积相对减小。无损压缩就是类似于Zip,Rar一类的压缩方式,通过字典保存重复值并以一定的坐标映射方式制定对应的值,例如 重复字符串占20位,而映射的字符串仅仅占2位,这样就达到了压缩的目的,压缩率就是要看重复值出现的概率。这仅仅是压缩的一种方式,还有许多专门针对特定文件的压缩算法。

差友们,听说过 ZIP 炸弹吗?

有好事者由此发展出带有恶搞性质的“压缩炸弹”,看似小巧的压缩包里会吐出令人难以置信的巨量文件,迅速塞爆你的电脑硬盘。电脑CPU也可能因为杀毒软件陷入死循环而不堪重负。

压缩文件的基本原理是查找文件内的重复字节,并建立一个相同字节的"词典"文件,并用一个代码表示,比如在文件里有几处有一个相同的词"中华人民共和国"用一个代码表示并写入"词典"文件,这样就可以达到缩小文件的目的。

2. 7z压缩

7-Zip 是一款 开源 软件。大多数源代码都基于 GNU LGPL 许可协议下发布。AES 代码基于 BSD 许可下发布。unRAR 代码基于两种许可:GNU LGPL 和 unRAR 限制许可。更多下许可信息请查看:7-Zip 许可。

您可以在任何一台计算机上使用 7-Zip ,包括用在商业用途的计算机,不对 7-Zip 进行捐赠或支付并不影响您的使用。

让我们把 7-Zip 和常用的压缩软件进行比较。

软件名称

Mozilla Firefox

Google Earth

161 个文件
15,684,168 字节

115 个文件
23,530,652 字节

压缩后

压缩比

压缩后

压缩比

7-Zip 4.23(7z 格式)

4621135

100%

6109183

www.3559.com,100%

WinRAR 3.50

5021556

109%

6824892

112%

CABARC 5.1

5131393

111%

7434325

122%

WinZip 10.0 beta(maximum-PPMd)

5277118

114%

8200708

134%

7-Zip 4.23(zip 格式)

6222627

135%

8909446

146%

WinZip 10.0 beta(maximum-portable)

6448666

140%

9153898

150%

压缩比结果由被压缩的数据大小而定。通常使用 7-Zip 的 7z 格式能比使用 zip 格式的压缩档案小 30-70%。并且使用 7-Zip 创建的 zip 格式比大多数其它压缩软件创建的都小 2-10%。

C# 实现方式可参考 

其中是用的C#调用外部程序的方式,所以没有添加DLL,直接调用的Exe文件。

 

一个很小很小的,几十 KB 的压缩过后的文件,解压以后有几百万 GB ,好像炸弹一样。

www.3559.com 2

压缩文件的压缩原理

3. Zip压缩

  Zip压缩被Windows系统原生支持,但其压缩率并不是很高,如果对压缩率比较敏感建议直接用7Z或rar。本人在项目中直接采用Zip的方式,利用开源控件实现压缩功能。

  DoNetZip() 相对比C#自带的Zip压缩类和其他开源方式好用些,这也是选择开源的原因。官网还有API文档基本很全面,但是略微有些过时,貌似是更新不及时,仅供大家参考。

 

代码很简单:

 

        /// <summary>
        /// Compress
        /// </summary>
        /// <param name="files"></param>
        /// <param name="zipFullName"></param>
        public static void Compress(List<string> files, string zipFullName)
        {
            //if (!System.IO.Directory.Exists(folderPath))
            //{
            //    throw new Exception("The directory does not exist!n");
            //}
            //if (System.IO.File.Exists(folderPath   "\"   zipName))
            //{
            //    throw new Exception("That zipfile already exists!n");
            //}
       // 以上注释掉的部分为检测是否文件已存在,因为如下代码会覆盖保存。

            using (ZipFile zip = new ZipFile())
            {
                zip.Comment = System.DateTime.Now.ToString("G");
                zip.AlternateEncoding = System.Text.Encoding.UTF8;
                zip.AlternateEncodingUsage = ZipOption.Always;
                zip.AddFiles(files, ""); // Add to root path, if not ,it should replace by "Template".
                zip.Save(zipFullName);
            }
        }

        /// <summary>
        /// Decompress
        /// </summary>
        /// <param name="folderPath"></param>
        /// <param name="zipName"></param>
        public static void Decompress(string folderPath, string zipName)
        {
            using (ZipFile zip = new ZipFile(folderPath   "\"   zipName))
            {
                zip.AlternateEncoding = System.Text.Encoding.UTF8;
                zip.AlternateEncodingUsage = ZipOption.Always;
                zip.ExtractAll(folderPath, ExtractExistingFileAction.OverwriteSilently);
            }
        }

说明:

                zip.AlternateEncoding = System.Text.Encoding.UTF8;  // 如果想启用编码方式,则两条语句必须都添加,就像必须先打开开关一样,然后再调节亮度。
                zip.AlternateEncodingUsage = ZipOption.Always;

 

Reference

 

任何疑问,欢迎回复。

在继续介绍它之前,差评君想先问问各位都用过哪些压缩软件。。。

目前有三种不同类型的恶搞压缩包,最小的一个42KB,解压后占用硬盘容量5.5GB;中等的10MB压缩包解压后占用硬盘281TB,当前已经没有能够容纳下它的硬盘;最大的一个也仅有46MB,但解压它需要使用4.5PB,也就是4500TB的存储空间。即便是当前最大的14TB硬盘,也要300多块才能容纳的下。

把文件的二进制代码压缩,把相邻的0,1代码减少,比如有000000,可以把它变成6个0 的写法60,来减少该文件的空间。

WinRAR ?

www.3559.com 3

由于计算机处理的信息是以二进制数的形式表示的,因此压缩软件就是把二进制信息中相同的字符串以特殊字符标记来达到压缩的目的。为了有助于理解文件压缩,请在脑海里想象一幅蓝天白云的图片。对于成千上万单调重复的蓝色像点而言,与其一个一个定义“蓝、蓝、蓝……”长长的一串颜色,还不如告诉电脑:“从这个位置开始存储1117个蓝色像点”来得简洁,而且还能大大节约存储空间。这是一个非常简单的图像压缩的例子。其实,所有的计算机文件归根结底都是以“1”和“0”的形式存储的,和蓝色像点一样,只要通过合理的数学计算公式,文件的体积都能够被大大压缩以达到“数据无损稠密”的效果。总的来说,压缩可以分为有损和无损压缩两种。如果丢失个别的数据不会造成太大的影响,这时忽略它们是个好主意,这就是有损压缩。有损压缩广泛应用于动画、声音和图像文件中,典型的代表就是影碟文件格式mpeg、音乐文件格式mp3和图像文件格式jpg。但是更多情况下压缩数据必须准确无误,人们便设计出了无损压缩格式,比如常见的zip、rar等。压缩软件(compression software)自然就是利用压缩原理压缩数据的工具,压缩后所生成的文件称为压缩包(archive),体积只有原来的几分之一甚至更小。当然,压缩包已经是另一种文件格式了,如果想使用其中的数据,首先得用压缩软件把数据还原,这个过程称作解压缩。常见的压缩软件有winzip、winrar等。

或者 2345 好压?

用WinRAR打开这些压缩文件你会发现,它的压缩率非常高,可以说几乎被压缩完了。

有两种形式的重复存在于计算机数据中,zip就是对这两种重复进行了压缩。

还是开源的 7 - Zip ?

www.3559.com 4

一种是短语形式的重复,即三个字节以上的重复,对于这种重复,zip用两个数字:1.重复位置距当前压缩位置的距离;2.重复的长度,来表示这个重复,假设这两个数字各占一个字节,于是数据便得到了压缩,这很容易理解。

www.3559.com 5

由于数据都是重复的内容,所以压缩算法能够用“N个1”或“N个0”来代替111111111……或者000000……,从而节省大量空间。

一个字节有 0 - 255 共 256 种可能的取值,三个字节有 256 * 256 * 256 共一千六百多万种可能的情况,更长的短语取值的可能情况以指数方式增长,出现重复的概率似乎极低,实则不然,各种类型的数据都有出现重复的倾向,一篇论文中,为数不多的术语倾向于重复出现;一篇小说,人名和地名会重复出现;一张上下渐变的背景图片,水平方向上的像素会重复出现;程序的源文件中,语法关键字会重复出现(我们写程序时,多少次前后copy、paste?),以几十 K 为单位的非压缩格式的数据中,倾向于大量出现短语式的重复。经过上面提到的方式进行压缩后,短语式重复的倾向被完全破坏,所以在压缩的结果上进行第二次短语式压缩一般是没有效果的。

其实压缩软件虽然五花八门,但目的都很单纯:

www.3559.com 6

第二种重复为单字节的重复,一个字节只有256种可能的取值,所以这种重复是必然的。其中,某些字节出现次数可能较多,另一些则较少,在统计上有分布不均匀的倾向,这是容易理解的,比如一个 ASCII 文本文件中,某些符号可能很少用到,而字母和数字则使用较多,各字母的使用频率也是不一样的,据说字母 e 的使用概率最高;许多图片呈现深色调或浅色调,深色(或浅色)的像素使用较多(这里顺便提一下:png 图片格式是一种无损压缩,其核心算法就是 zip 算法,它和 zip 格式的文件的主要区别在于:作为一种图片格式,它在文件头处存放了图片的大小、使用的颜色数等信息);上面提到的短语式压缩的结果也有这种倾向:重复倾向于出现在离当前压缩位置较近的地方,重复长度倾向于比较短(20字节以内)。这样,就有了压缩的可能:给 256 种字节取值重新编码,使出现较多的字节使用较短的编码,出现较少的字节使用较长的编码,这样一来,变短的字节相对于变长的字节更多,文件的总长度就会减少,并且,字节使用比例越不均匀,压缩比例就越大。

把文件占用空间缩小。

www.3559.com 7

更多关于“压缩文件”等建筑方面的知识和建筑施工企业资质,可以登入中国本网建设通进行查询。

不过差评君上面提到的压缩软件,又不单纯是缩小空间。

在尝试解压这些重复数据到硬盘的时候,小编也发现了一个奇特的现象,东芝TR200 240GB固态硬盘几乎能持续以SATA3.0接口下的全速进行写入,似乎无视了SLC缓存容量的限制。

www.3559.com 8

JPG 图片 , MP3 音乐格式也起到了压缩作用。

www.3559.com 9

关注手机本网(

但是 JPG, MP3 们执行的是有损压缩

这个现象其实不难解释。东芝TR200固态硬盘的主控具备一定的数据压缩能力,由压缩包解压出的重复数据经过TC58NC1010GSB主控的重新压缩,实际写入闪存的数据量就很小了。

www.3559.com 10

www.3559.com 11

一旦个文件被有损压缩的时候,会损失一部分数据。

这样的主控压缩设计还有另一层用途。虽然网上常用的JPG图片以及ZIP压缩包都是经过压缩的形态、很难被再度压缩,但是在应用程序的代码以及数据库中也常会出现一些容易压缩的片段。这时TR200的主控压缩能力就可以派上用场,一方面能够提升效能表现,另一方面也能进一步延长固态硬盘的使用寿命。

损失的代价就是,你无法从被压缩的文件还原出压缩前的文件。

www.3559.com 12

图片,音乐等多媒体在有的时候考虑可用性和传播性,对这样的结果是可以接受的。

今天介绍的这种恶搞压缩包并不会对电脑硬件造成实质性的损伤,最多只会塞爆电脑的硬盘,用作朋友之间的玩笑也不会造成恶劣后果。只是如果你的固态硬盘不具备主控数据压缩能力的话还是不要反复尝试了,毕竟写入量的增长还是很快的。

但对许多通用数据来说,往往需要的是无损压缩,比如 .zip 。

{"type":2,"value":"

对于无损压缩来说,算法非常重要,不同的算法能实现的压缩率和速度有很大差别。

www.3559.com 13

如上图所示,主流的算法一般在 30% - 40% 。

而文章一开始介绍的 ZIP 炸弹,是一个名为 42.zip 的文件。

它的初始大小是 42KB , 解压密码是 42 。

解压之后的大小,足足有4.5 PB 。

嗯。。。就是这么嚣张。

解压这个 42.zip 以后会出现 16 个压缩包,每个压缩包又包含 16 个,如此循环 5 次,最后得到 16 的 5 次方个文件,也就是 1048576 个。

www.3559.com 14

这一百多万个最终文件,每个大小为 4.3 GB 。

因此整个解压过程结束以后,会得到 1048576 * 4.6 GB = 4508876.8 GB

也就是 4508876.8 ÷ 1024 ÷ 1024 = 4.5 PB

还有比它更嚣张的。

一个叫做 droste.zip 的大小为 28 KB 的文件,一旦被打开了以后,就会无限解压缩生成一份同样的文件,直到永远。

这个文件名灵感应该取自德罗斯特效应 ( Droste Effect ),是指一张图片的部分与整张图片相同,无限循环。。。如下图↓

www.3559.com 15

这个名字源自一家叫德罗斯特的可可粉厂商做的商品包装。。。

注意女仆手上拿着的产品图

www.3559.com 16

咳咳。。。扯远了。

总而言之,这个 droste.zip 的核心原理就是输出结果为自身。

举个例子,制作者大概做了这么一件事:

在引号里重复这句话 “ 在引号里重复这句话 ”

然后解压缩之后,硬盘就。。。 BOOM !

www.3559.com 17

当然。。。也有剑走偏锋思路不同的。

有一段名为 《 彗星撞地球 》 的影片,也展现了神奇的压缩比率。

这段 3D 影片如果直接放出来要 15 G 左右,效果。。。放在它出生的年代 2000 年还真不差。

www.3559.com 18

这个压缩过的大小只有 64 KB, 压缩了 25 万倍 !

实现的原理其实不算通常意义上的压缩。

而是制作组 Warez 做了一个 64KB 的可执行 EXE 文件,运行的时候会调用显卡,CPU 及内存等等及时渲染动画。

打个比方,动画就好比连环画,传统影片是画好的一册,而这个 《 彗星撞地球 》 则是看的时候现场一幅幅画。

差评君用录屏软件录了 7 分钟都要 2.27 G 。( 当然,这和现代显示屏分辨率比较高有关系 )

www.3559.com 19

那么问题来了。。。

一个文件的压缩率有极限吗?

有,可以由信息学之父克劳德·香农提出的信息熵函数算出来。

www.3559.com 20

不过 42.zip 也好,droste.zip 也好,不适合套用香农提出的极限。

因为这两个文件为了达到惊人的压缩比,有大量刻意重复的数据,这种重复数据在压缩的时候是可以被丢弃的,没啥实质性内容的信息。

那么。。。

如果动画还有点传播意义, 42.zip 和 droste. zip 还有啥意义呢?

这儿就要提就是 ZIP 炸弹之所以被称作 “ 炸弹 ” 的真正原因了。。。

除了会 “ 爆炸 ” ,这玩意儿其实是拿来攻击别人的。

www.3559.com 21

某些病毒制作者利用杀毒软件会扫描压缩文件内部的特性,会把 ZIP 炸弹连带病毒一起发到目标电脑上。

而 ZIP 炸弹表面上看起来很小,易于传输,但实际上扫描起来非常花时间。

趁着杀毒软件忙着扫描 4.5 PB 的数据,被占用时,病毒软件就可以趁虚而入了 ~

差评君昨天说了啥来着。。。

干黑产的,角度刁钻得让人折腰。

不过现在很多杀毒软件已经有办法避开这种 zip 炸弹的佯攻了,这个话题渐渐地抛开了黑产。

一直以来压缩算法是算法研究里津津乐道的话题, Huffman 树, LZW 字典等等。。。

用程序解决信息问题的姿势,仔细一琢磨也挺有意思的不是?

图片来源

BetaNews

tylerbrownblog

Tom’s Hardware

steemit

参考资料

Quora 问题《 What is the most compressed file ever? 》

知乎问题 《 世界上最大的文件压缩率是多少? 》中,用户 @何先森饭扫光, @罗翔 的回答。

维基百科词条 “ 自产生程序 ”

维基百科词条 “ zip bomb ”

●编号698,输入编号直达本文返回搜狐,查看更多

责任编辑:

编辑:www.3559.com 本文来源:解压完其实是个4,ZIP压缩炸弹

关键词: www.3559.com