常见文件格式特征
txt
纯文本文件格式,即只有文本没有任何文件标识和结构,所存内容即为文件格式。与之对应的是富文本格式,由未格式化文本、控制字、控制符号等组成,能包含文本图像颜色等。
以下是在winhex中查看的一个txt格式的文档的内容
doc/docx
是一种富文本格式。是微软的office word软件创建的文件格式。docx是在doc的基础上加入了xml,并且以一个zip压缩文件的形式存在。所以可以将docx的文件解压缩。
这就是一个docx的文档用解压软件打开后的内容
用winhex打开,其文件头是50 4B 对应ascii码为PK。这个也是zip的文件头
png
是无损压缩的图片格式。
一个png文件由一个文件头标志和若干个数据块顺序排列构成。开始为16进制89,这个超出了ascii范围,为了防止被解析为文本文件。
每一个数据块由四个部分组成,第一个部分占四个字节数据部分长度,4个字节类型,不固定具体的数据信息,最后四个字节表示校验码
其中叫做INDR数据块的数据部分需要特别关注
其中色深(每一个像素所占的位数)表示支持的颜色种类,如04支持2^4种。
用winhex打开一个png文件
其中蓝色部分框部分为数据部分所占长度D,即13个字节。而数据部分,即棕色框确实为13个字节。
绿色框部分为类型,即该数据块为IHDR。
棕色框部分,第一条红线和第二条红线为宽度和高度,即5F 6B十进制为95 107,查看该图片的详细信息确实为95像素和107像素的。
棕色划线部分为校验和。
jpg/jpeg
jpg和jpeg是一种格式。属于有损压缩的图片格式。有多个段组成,每个段由FF开头,之后的一个字节代表该段的类型。其中FFD8(图像起始位置)FFE0(文件详细信息)FFC0(框架起始位置)FFDA(扫描起始位置)FFD9(文件结束符)
用winhex打开一个jpg文件如下
jpeg图像压缩原理
- 将图像分成多个 8*8的像素块。因为在8*8的像素的方格中,像素是非常相似的。
- 对每一个像素块进行离散余弦逆变换(DCT),产生了一个新的8*8的块。在每一个块中,像素点间的差异大则弦波频率高,称为高频区,差异小则弦波频率低,称为低频区。通过DCT变换后,新块中的高频系数越接近右下,低频系数越接近左上
- 然后进行量化:因为得到的新块还不能直接进行压缩。因为人对高频识别较差,所以可以去除大量高频系数,所以将新块除以一个特定的矩阵,再取整,使高频系数基本为0
- 通过熵编码等对图像进行压缩
供参考的两篇文章
https://blog.csdn.net/ljh618625/article/details/102760728
(https://www.cnblogs.com/Arvin-JIN/p/9133745.html)[https://www.cnblogs.com/Arvin-JIN/p/9133745.html]
bmp
不采用任何其它的压缩方式,保留图像的原汁原味
由文件头、信息头、调色板、数据四部分组成
文件头占14个字节
字节数 | 意义 |
---|---|
2个字节 | 位图的类别 |
4个字节 | 位图的大小 |
4个字节 | 两个保留位 |
4个字节 | 文件头到实际的数据之间的偏移量(以小端存储) |
信息头通常40个字节
字节数 | 意义 |
---|---|
4个字节 | 文件大小 |
4字节 | 宽度 |
4字节 | 高度 |
2个字节 | 目标设备的颜色平面数 |
2个字节 | 一个像素点占几位 |
4个字节 | 压缩类型(一般为0不压缩) |
4个字节 | 图像的大小 |
4个字节 | 水平分辨率 |
4个字节 | 垂直分辨率 |
4个字节 | 位图使用调色板的实际索引数(0是使用所有索引) |
4个字节 | 对图像显示有重要影响的索引数 |
通过高度的正负(负值以补码形式表示)可以判断位图是倒向(正)还是正向(负)
gif
无损压缩。并不存储颜色本身,而是该点的颜色对应的颜色列表的索引值。可以存储多个图像和控制图像的行为的控制块,从而实现动画效果。由文件头、gif数据流、终结器组成。
另
在kali中通过file命令可以判断文件类型
常见文件头,文件尾总结。这张图截自一个文档,出处找不到了。