最近看linux的解压缩,无意间了解到了一个和压缩率相关的小故事——42.zip
一般我们使用压缩工具的时候,都会用到无损压缩技术,对于无损压缩,算法非常重要,不同的算法实现
的压缩率和速度有很大差别,主流的算法压缩率都在30%-40%之间,而这里要说的42.zip,它的压缩率可
以说是相当恐怖了,这里顺便贴上这个文件的下载地址:42.zip。
它的原始大小就和它的文件名一样:42kb,但是解压(解压密码是42)之后,大小足足有4.5PB,什么概念
呢,4.3G x 16的五次方:
首先,这个文件解压之后,会得到16个压缩文件,然后每个文件解压又会出现16个压缩文件,继续每个文件
解压又会得到16个压缩文件,循环5次,最终得到1048576个文件,每个最终文件大小为4.3GB。
惊喜不惊喜?刺激不刺激?其实还有比这更刺激的。
一个叫做droste.zip的大小为28kb的文件,一旦被打开之后,就会无限解压缩生成一份同样的文件,直到永远,
直到永远啊~~~~
这个文件的灵感应该取自德罗斯特效应,一张图片的部分与整张图片相同,无限循环:
一个文件的压缩率有极限么,是可以有的,可以有信息学之父克劳德·香农提出的信息熵函数算出来:
不过上述两个文件不适合套用该函数。
这种文件有什么存在的意义呢,意义在于这类文件的别名——ZIP炸弹。
这玩意儿除了会BOOM之外,其实是用来攻击别人的,一些病毒制作者,利用杀软扫描压缩文件内部的特性,
会将ZIP炸弹和病毒一起发到目标电脑上,趁着杀软扫描4.5PB的数据,病毒就可以乘虚而入了。不过现在很
多杀软已经有办法避开这类zip炸弹的佯攻了。