一个42KB的文件,解压完其实是个4.5PB的“炸弹”……
差友们,听说过 ZIP 炸弹吗?
一个很小,几十KB的压缩文件,解压后有几百万GB,像个炸弹。
在继续介绍之前,差评人想问一下大家用过什么压缩软件?
你赢了?
还是2345?
还是开源7-Zip?
事实上,虽然压缩软件多种多样,但目的很简单:减少文件占用的空间。
但是,判断上面提到的压缩软件,并不是单纯为了缩小空间。
JPG图片,MP3音乐格式也起到了压缩的作用。
但是JPG和MP3做的是有损压缩。
一旦文件被有损压缩,一些数据将会丢失。
损失的代价是你无法从压缩文件中还原压缩前的文件。
图片、音乐等多媒体有时会考虑可用性和传播性,这是可以接受的。
但是对于许多一般数据来说,通常需要的是无损压缩,比如 .zip 。
对于无损压缩,算法很重要,不同的算法可以达到不同的压缩率和速度。
如上图所示,主流算法一般是30%-40%。
而文章一开始介绍的 ZIP 炸弹,是一个名为 42.zip 的文件。
它的初始大小是42KB,解压缩密码是42。
减压后的尺寸足够 4.5 PB 。嗯。就是这么嚣张。
解压这个 42.zip 以后会出现 16 个压缩包,每个压缩包又包含 16 个,如此循环 5 次,最后得到 16 的 5 次方个文件,也就是 个。
这一百多万个最终文件,每个大小为 4.3 GB 。
因此整个解压过程结束以后,会得到 * 4.6 GB = .8 GB
也就是 .8 ÷ 1024 ÷ 1024 = 4.5 PB
还有比这更嚣张的。
一个叫做 droste.zip 的大小为 28 KB 的文件,一旦被打开了以后,就会无限解压缩生成一份同样的文件,永远永远。这个文件名的灵感应该取自Droste效应,意思是一张图片的一部分和整张图片一样,无限循环。如下图
这个名字
注意女仆手里的产品图
咳咳。跑题了。
总而言之,这个 droste.zip 的核心原理就是输出结果为自身。
比如制作人大概做过这样的事:
用引号重复这句话。用引号把这句话重复一遍。
然后解压后硬盘就。嘣!
当然可以。也有不同的思维方式。
有一部电影叫《彗星撞地球》,也表现出惊人的压缩比。
如果这部3D电影直接上映,大概需要15 G左右,效果会很好。2000年诞生的时候还不错。
这个压缩尺寸只有64 KB,压缩25万倍!实现的原理其实不是通常意义上的压缩。
而是制作团队Warez制作了一个64KB的可执行EXE文件,运行时会调用显卡、CPU、内存及时渲染动画。
比如动画就像一本漫画书,传统电影是一本好书,这个《彗星撞地球》是看的时候当场拍的图。
差评君用录屏软件录了 7 分钟都要 2.27 G 。( 当然,这和现代显示屏分辨率比较高有关系 )
所以问题来了。
文件的压缩率有限制吗?
是的,它可以由信息学之父克劳德.香农提出的信息熵函数来计算。
不过 42.zip 也好,droste.zip 也好,不适合套用香农提出的极限。
因为这两个文件为了达到惊人的压缩比,有很多故意重复的数据,这种重复的数据压缩的时候可以丢弃,没有实质性的信息。
所以。
如果动画还有点传播意义, 42.zip 和 droste. zip 还有啥意义呢?
ZIP炸弹之所以被称为“炸弹”,真正的原因就在这里提到。
除了“爆炸”,这个东西其实是用来攻击别人的。
一些病毒制造者使用杀毒软件扫描压缩文件的内部特征,并与病毒一起向目标计算机发送ZIP炸弹。
表面上看,ZIP炸弹体积小,便于运输,但实际上扫描要花很多时间。
趁着杀毒软件忙着扫描 4.5 PB 的数据,被占用时,病毒软件就可以趁虚而入了 ~
你昨天说什么了?
是干黑的,角度很尖。
但是现在很多杀毒软件都有办法避免zip炸弹的假攻击,这个话题也逐渐抛开了黑产品。
压缩算法一直是算法研究的热点,如霍夫曼树、LZW字典等。
仔细想想用程序解决信息问题的姿态,很有意思。
图片 BetaNews tylerbrownblog Tom’s Hardware steemit 参考资料: Quora 问题《 What is the most compressed file ever? 》 知乎问题 《 世界上最大的文件压缩率是多少? 》中,用户 @何先森饭扫光, @罗翔 的回答。 维基百科词条 “ 自产生程序 ” 维基百科词条 “ zip bomb ” 如果你好奇这些文件是怎么回事,差评君在这里提供下载链接,微信“借一个说话可以变成借一万个说话”