压缩包的压缩原理

压缩包的压缩原理

CTF-misc-压缩包



一、压缩包的基本原理

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

由于计算机处理的信息是以二进制数的形式表示的,因此压缩软件就是把二进制信息中相同的字符串以特殊字符标记来达到压缩的目的。


二、有损压缩和无损压缩

压缩可以分为有损和无损压缩两种。

1.有损压缩

如果丢失个别的数据不会造成太大的影响,这时忽略它们是个好主意,这就是有损压缩。

有损压缩广泛应用于动画、声音和图像文件中,典型的代表就是影碟文件格式mpeg、
音乐文件格式mp3和图像文件格式jpg。

有损压缩可能会导致数据无法正常传达,比如我们进行LSB隐写要求图片必须是无损压缩或者无压缩,比如png和bmp格式的图片,jpg图片是有损压缩可能会导致我们隐写的信息在压缩过程中被破坏。

2.无损压缩

多数情况下压缩数据必须准确无误,人们便设计出了无损压缩格式,比如常见的zip、rar等。压缩软件(compression software)自然就是利用压缩原理压缩数据的工具,压缩后所生成的文件称为压缩包(archive),体积只有原来的几分之一甚至更小。当然,压缩包已经是另一种文件格式了,如果你想使用其中的数据,首先得用压缩软件把数据还原,这个过程称作解压缩。常见的压缩软件有winzip、winrar等。


三、数据的重复形式

对文件进行压缩就是针对文件中的重复数据进行操作。

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

1. 短语形式的重复

短语形式的重复,即三个字节以上的重复,对于这种重复,zip用两个数字来表示这个重复:

  1. 重复位置距当前压缩位置的距离;
  2. 重复的长度,假设这两个数字各占一个字节,于是数据便得到了压缩,这很容易理解。

一个字节有 0 − 255 0 - 255 0255 256 256 256 种可能的取值,三个字节有 256 ∗ 256 ∗ 256 256 * 256 * 256 256256256 共一千六百多万种可能的情况,更长的短语取值的可能情况以指数方式增长,出现重复的概率似乎极低。

实则不然,各种类型的数据都有出现重复的倾向,一篇论文中,为数不多的术语倾向于重复出现;一篇小说,人名和地名会重复出现;一张上下渐变的背景图片,水平方向上的像素会重复出现;程序的源文件中,语法关键字会重复出现(我们写程序时,多少次前后copy、paste?),以几十 K 为单位的非压缩格式的数据中,倾向于大量出现短语式的重复。经过上面提到的方式进行压缩后,短语式重复的倾向被完全破坏,所以在压缩的结果上进行第二次短语式压缩一般是没有效果的

2. 单字节的重复

一个字节只有256种可能的取值,所以这种重复是必然的。其中,某些字节出现次数可能较多,另一些则较少,在统计上有分布不均匀的倾向,这是容易理解的,比如一个 ASCII 文本文件中,某些符号可能很少用到,而字母和数字则使用较多,各字母的使用频率也是不一样的,据说字母 e 的使用概率最高;许多图片呈现深色调或浅色调,深色(或浅色)的像素使用较多。

png 图片格式是一种无损压缩,其核心算法就是 zip 算法,它和 zip 格式的文件的主要区别在于:作为一种图片格式,它在文件头处存放了图片的大小、使用的颜色数等信息)

上面提到的短语式压缩的结果也有这种倾向:重复倾向于出现在离当前压缩位置较近的地方,重复长度倾向于比较短(20字节以内)。这样,就有了压缩的可能:给 256 种字节取值重新编码,使出现较多的字节使用较短的编码,出现较少的字节使用较长的编码,这样一来,变短的字节相对于变长的字节更多,文件的总长度就会减少,并且,字节使用比例越不均匀,压缩比例就越大。


参考

https://blog.51cto.com/zyjkkk1212/66370

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dawn.Ki

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值