最近看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炸弹的佯攻了。

42.zip的更多相关文章

  1. zip炸弹

    故障系统有人提了zip炸弹的故障,了解了一些关于zip炸弹的常识. 42.zip 是很有名的zip炸弹.一个42KB的文件,解压完其实是个4.5PB的“炸弹”. 更有甚者,一个叫做 droste.zi ...

  2. 操作系统OS - Zip Bomb

    42.zip - A 42 kb zip file that contains 4.5 Petabytes of uncompressed data.

  3. c#文件操作

    1.创建文件夹 //using System.IO; Directory.CreateDirectory(%%1);   2.创建文件 //using System.IO; File.Create(% ...

  4. Ubuntu环境搭建系列—JavaEE篇

    恩,其实我是一时兴起,所以就写了目前这几篇环境的博文,希望能给自己做一个笔记,同时也能够给一些新手带来一些帮助,不会在配置方面那么迷茫.本篇文章主要就是针对Java web开发进行环境搭建. 一.To ...

  5. C# 文件操作大全

    1.创建文件夹//using System.IO;Directory.CreateDirectory(%%1); 2.创建文件//using System.IO;File.Create(%%1); 3 ...

  6. Wijmo 5 与Breeze 的组合,及与METRONIC 的集成

    1.Wijmo 5  是支持ANGULARJS 的HTML5 控件   http://wijmo.gcpowertools.com.cn/ 官方试用版  C1Wijmo-Eval_5.20151.42 ...

  7. Java最全文件操作实例汇总

    本文实例汇总了Java文件操作.分享给大家供大家参考,具体如下: 1.创建文件夹 ? 1 2 3 4 5 6 7 8 9 10 11 //import java.io.*; File myFolder ...

  8. Dubbox监控在服务器中的安装

    Jdk-1.6.30以上版本 Tomcat-7.0.42 Duboo-2.5.3 Zookeeper-3.4.5 端口分配 序 系统/端口 http https shutdown ajp 调度JMX ...

  9. 新唐M0 ISP下载要点

    http://blog.csdn.net/rejoice818/article/details/7736029 一.注意:官方光盘内“Software Utilities”目录下,可找到ICP或ISP ...

随机推荐

  1. 20145327 《Java程序设计》第二周学习总结

    20145327 <Java程序设计>第二周学习总结 教材学习内容总结 JAVA类型:基本类型与类类型(也称参考类型). 基本类型分为:整数(short,int,long).字节(byte ...

  2. 20145335郝昊《java程序设计》第4周学习总结

    20145335郝昊 <Java程序设计>第4周学习总结 教材学习内容总结 第六章 何谓继承: 概念: 面向对象中,为避免多个类间重复定义共同行为.(简单说就是将相同的程序代码提升为父类. ...

  3. 一键安装 zabbix 2.0 版本 脚本

    原文地址: http://blog.csdn.net/u012449196/article/details/53859068 本文修改了原文中的部分错误,此脚本适用于zabbix 2.0 版本,以版本 ...

  4. MongoDB 性能优化

    Read Preferences/读写分离 有时候为了考虑应用程序的性能或响应性,为了提高读取操作的吞吐率,一个常见的措施就是进行读写分离,MongoDB副本集对读写分离的支持是通过Read Pref ...

  5. JQuery中serialize()

    一.serialize()定义和用法: serialize()方法通过序列化表单值,创建标准的URL编码文本字符串,它的操作对象是代表表单元素集合的jQuery 对象.你可以选择一个或多个表单元素(比 ...

  6. git 提交某个内容

    git add 你所添加的文件或者文件夹 git commit git push

  7. [WCF安全3]使用wsHttpBinding构建基于SSL与UserName授权的WCF应用程序

    上一篇文章中介绍了如何使用wsHttpBinding构建UserName授权的WCF应用程序,本文将为您介绍如何使用wsHttpBinding构建基于SSL的UserName安全授权的WCF应用程序. ...

  8. RNAseq 流程

    https://github.com/twbattaglia/RNAseq-workflow

  9. java_zlib_资料

    1.网页资料 1.1.http://bbs.csdn.net/topics/190020986 1.2. http://cdn.verydemo.com/demo_c89_i166794.html h ...

  10. angular-cli 工程中使用scss文件

    angular/cli支持使用sass 新建工程: 如果是新建一个angular工程采用sass: ng new My_New_Project --style=sass 这样所有样式的地方都将采用sa ...