你听说过 ZIP 炸弹吗?

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

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

WinRAR ?

或者 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 次方个文件,也就是 1048576 个。

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

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

也就是 4508876.8 ÷ 1024 ÷ 1024 = 4.5 PB

还有比它更嚣张的。

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

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

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

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

咳咳。。。扯远了。

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

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

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

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

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

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

这段 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 炸弹的佯攻了,这个话题渐渐地抛开了黑产。

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

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

∑编辑 | Gemini

来源 | 差评

更多精彩:

☞  哈尔莫斯:怎样做数学研究

☞  扎克伯格2017年哈佛大学毕业演讲

☞  线性代数在组合数学中的应用

☞  你见过真的菲利普曲线吗?

☞  支持向量机(SVM)的故事是这样子的

☞  深度神经网络中的数学,对你来说会不会太难?

☞  编程需要知道多少数学知识?

☞  陈省身——什么是几何学

☞  模式识别研究的回顾与展望

☞  曲面论

☞  自然底数e的意义是什么?

☞  如何向5岁小孩解释什么是支持向量机(SVM)?

☞  华裔天才数学家陶哲轩自述

☞  代数,分析,几何与拓扑,现代数学的三大方法论

算法数学之美微信公众号欢迎赐稿

稿件涉及数学、物理、算法、计算机、编程等相关领域,经采用我们将奉上稿酬。

投稿邮箱:math_alg@163.com

一个42KB的文件,解压完其实是个4.5PB的“炸弹”相关推荐

  1. linux解压完的文件在哪里,如何在 Linux 下解压 Zip 文件

    先决条件:安装了unzip 命令:sudo apt install unzip 确认你的系统中安装了unzip 就可以通过unzip来解压 zip 归档文件 在放 zip 文件的目录,用下面的命令: ...

  2. zip文件解压或压缩

    <span style="font-size:18px;">/*** lsz*/ public final class ZipUtil {/*** 解压zip文件* @ ...

  3. gz文件解压命令 linux_linux常用命令和文件上传(FZ)、解压、配置环境变量(JDK)

    第141次(Linux) 学习主题:Linux 学习目标: 掌握Linux常用命令 一.Linux常用命令 1-cd命令 change directory – 切换目录 特殊目录符号 :当前目录 –' ...

  4. Java实现Zip文件解压

    2019独角兽企业重金招聘Python工程师标准>>> ##1. 两种java实现zip文件解压方式 使用JDK的原生类java.util.zip,上代码: import java. ...

  5. android assets解压,Android assets内压缩文件解压,解压到缓存示例

    1.assets内压缩文件解压AssetsZipUtils,包含一个获取文件夹下所有文件路径的方法,方便获取文件使用 public class AssetsZipUtils { public stat ...

  6. Linux下常见文件解压方法及命令

    Linux下常见文件解压方法及命令时间:2007-01-08 18:34来源:CSDN作者:bitsCN编辑字体:[大 中 小]1.以.a为扩展名的文件: #tar xv file.a 2.以.z为扩 ...

  7. linux解压后缀为.xz,xz后缀名文件解压方法

    后缀名为xz的这种文件是使用tar打包后再压缩生成的.解压方法是: 1.xz -d **.tar.xz 2.tar -xvf **.tar 如没有按照xz工具,则首先需要下载.安装xz工具: 安装: ...

  8. linux后缀为tar.xz,xz后缀名文件解压方法

    后缀名为xz的这种文件是使用tar打包后再压缩生成的.解压方法是: 1.xz -d **.tar.xz 2.tar -xvf **.tar 如没有按照xz工具,则首先需要下载.安装xz工具: http ...

  9. 用赫夫曼树进行文件解压

    思路分析 代码实现 package com.atguigu.huffmancode;import com.sun.org.glassfish.external.statistics.CountStat ...

最新文章

  1. 流程 - 什么是真正的Scrum?
  2. ASP.NET在IIS上部署使用Oracle数据库无法连接数据库解决方法
  3. linux后台运行cat命令,Linux程序前台后台切换
  4. lnmp应用服务器安装手册
  5. COVID-19和世界幸福报告数据告诉我们什么?
  6. goaheadlinux移植_goahead
  7. [Android开发]zip文件压缩解压缩
  8. 企业级生产环境CICD入门
  9. NodeJS收发GET和POST请求
  10. keil中编译时出现*** ERROR L107: ADDRESS SPACE OVERFLOW
  11. Oracle数据泵对已经存在的表加载索引
  12. 等价类划分法-案例剖析-设计测试用例
  13. 千呼万唤始出来:JUC灵魂AQS终于来了
  14. 编译器设计(二)——上下文无关文法及推导
  15. 差分编码与译码代码编写
  16. 区块链专利申请全球过半 厉害了我的国
  17. 构建您的第一个Web爬网程序,第3部分
  18. 天眼查 乱码 java_反爬虫解析-字体替换(天眼查/猫眼电影)
  19. 来给罗永浩和王自如打个分
  20. 性别检测识别、年龄检测识别

热门文章

  1. jsp和java使用值_如何将表单的值从jsp发送到Java
  2. 通讯接口应用笔记3:使用W5500实现Modbus TCP服务器
  3. 非对称加解密交互故事
  4. iOS开发ARC入门和使用
  5. go语言mysql删除记录_MySQL数据库删除操作-Go语言中文社区
  6. 网线制作ppt_快速制作PPT技巧!
  7. Linux的实际操作:给Linux添加一块新硬盘
  8. 计算机网络中缓存技术,编程达人
  9. android代码判断权限,安卓权限检测代码
  10. php登录信息首页显示,首页登录后怎么在首页显示用户名以及隐藏登录框?